본문 바로가기
웹개발지식쌓기

[back] ORA-01861: literal does not match format string

by developer_j 2023. 5. 26.
728x90
반응형

진짜 가끔 발생하는 오류 ORA-01861: literal does not match format string 

로컬에서는 잘만 되던게 서버에 올리니까 갑자기 오류를 내뿜는다.

나의 경우는 TO_CHAR(SYSDATE, 'YYYYMMDD')로 가져온 날짜 데이터를 빼기 계산해서 잔여 일수를 노출시키는 것이 목적이었는데, 여기에서 오류가 발생했다.

 

오류 쿼리

, (TO_DATE(TO_CHAR(SHOW_END_DT, 'YYYYMMDD')) - TO_DATE(TO_CHAR(SYSDATE, 'YYYYMMDD')) AS REMAINDER_DATE

 

원인 자체는 TO_CHAR, TO_DATE 함수에 날짜를 사용하려 할 때, 두번째 인자인 형식 지정을 해주지 않아서 그런거였다.

 

TO_DATE를 사용할때, 두번째 인수를 셋팅하지 않으면 오라클 데이터베이스에 설정되어있는 날짜 설정에 따라 변환되는데, 해당 에러는 개발 DB의 문자셋과 언어설정, 날짜설정이 운영DB의 설정 값과 다르기 때문에 나타나는 것이다.

참조 - https://smile-haha.tistory.com/7

 

[oracle] ORA-01861: literal does not match format string

개발서버에서 개발을 하다가 개발한 소스를 운영환경에 올릴 경우, TO_CHAR, TO_DATE 메서드를 사용하는 부분에서 가끔씩 아래와 같은 에러가 발생한다.(ex) TO_CHAR(TO_DATE(‘20170101’),'yyyy-mm-dd') 개발서

smile-haha.tistory.com

 

TO_CHAR(DATE) 라던지, TO_DATE(DATE) 라던지!

TO_CHAR(DATE, 'YYYY-MM-DD') 또는 TO_DATE(DATE, 'YYYY-MM-DD') 처럼 두번째 인자에 형식 지정을 해주는 것을 꼭 지켜주장

물론 DB의 날짜 설정 값이 운영DB - 테스트DB가 같다면 괜찮을 수 있겠지만, 그래도 혹시 모르니 꼭 써줘야 할 것 같다.

 

정상 쿼리

, (TO_DATE(TO_CHAR(SHOW_END_DT, 'YYYYMMDD'), 'YYYY/MM/DD HH24:MI:SS') - TO_DATE(TO_CHAR(SYSDATE, 'YYYYMMDD'), 'YYYY/MM/DD HH24:MI:SS') AS REMAINDER_DATE

 

728x90
반응형