ORA-01861: literal does not match format string

-·2023년 11월 25일
0

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이 필요한 함수사용시에는 포맷을 무조건 지정해주자.

profile
거북이는 오늘도 걷는다

0개의 댓글

관련 채용 정보