ORA-01861: 리터럴이 형식 문자열과 일치하지 않음
ORA-01861: literal does not match format string
보통 로컬환경이나 쿼리작성툴 에서는 되는데 개발서버, 테스트서버에만 올리면 이러한 에러들로 막히는 경우가 많다.
이러한 에러는
TO_DATE와 TO_CHAR의 함수에 날짜형식을 지정하지 않았을 때 발생한다.
TO_DATE('2020-01-01')
TO_CHAR('2020-01-01')
이런식으로 함수의 2번째 인자인 dateformat을 생략하면 셋팅에 따라서 자동으로 포맷이 들어가는데
우리는 보통 'YYYY-MM-DD'를 기대하고 저걸 쓰겠지만 기본형식이 'DD-MON-RR'이런 환경이 있다.
그럼 포맷이 달라지면서 에러를 뱉는것이다.
그래서 해결법은
TO_DATE('2020-01-01', 'YYYY-MM-DD')
TO_CHAR('2020-01-01', 'YYYY-MM-DD')
이렇게 항상 포맷을 지정하는 습관을 들이자..!
근데 이게 맞는지 확인 해보고 싶을수도 있잖아?
그렇다면 내 서버셋팅이 어떻게 되어있는지 확인해보고 싶을것이다.
SELECT *
FROM nls_session_parameters
WHERE PARAMETER LIKE '%DATE%' OR PARAMETER LIKE '%LANG%';
이러면
서버 환경값이 나온다.
근데 맨날 확인해볼려고 수정할때마다 재기동을 하기도 뭐하고 로컬에서 동일한 환경을 셋팅해서 해보는게 제일 좋겠지?
ALTER SESSION SET NLS_LANGUAGE = 'AMERICAN';
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR';
ALTER SESSION SET NLS_DATE_LANGUAGE = 'AMERICAN';
이러면 서버셋팅을 바꿀수있다.
오라클 환경변수 설정이나 다른방법도 있지만.
일단은 그냥 TO_DATE, TO_CHAR dateformat이 필요한 함수사용시에는 포맷을 무조건 지정해주자.