오라클 ORA-01861: literal does not match format string 질문 0 1 759

by 십이장기 [2021.01.08 15:13:45]


제가 쿼리중에서의 select문중에서

, CASE WHEN MOD( TO_CHAR( SYSDATE , 'YYYY'), 4) <> 0 AND  TO_CHAR(BIRTH_DATE , 'MMDD') = '0229'   
          THEN   TO_DATE( TO_CHAR( SYSDATE , 'YYYY') || '0301' )
          ELSE   
              CASE WHEN TRUNC(SYSDATE) >  TO_DATE( TO_CHAR( SYSDATE , 'YYYY')  || TO_CHAR(BIRTH_DATE , 'MMDD')) THEN 
                           CASE  WHEN /*MOD( TO_CHAR( SYSDATE , 'YYYY')+ 1, 4)*/ <> 0  AND  TO_CHAR(BIRTH_DATE , 'MMDD') = '0229'   
                                 THEN TO_DATE( TO_CHAR( SYSDATE , 'YYYY') + 1 || '0301' ) 
                              ELSE  TO_DATE( TO_CHAR( SYSDATE , 'YYYY') + 1  || TO_CHAR(BIRTH_DATE , 'MMDD'))    END
                 ELSE TO_DATE( TO_CHAR( SYSDATE , 'YYYY')  || TO_CHAR(BIRTH_DATE , 'MMDD'))             
              END  END AS BIRTHDT

 

이렇게 쓰는게 있는데 이부분에서 

ORA-01861 이 에러가 나는데  혹시 어떤부분인지 잘 모르겠네요ㅠㅠ 날짜형식이랑 string형식 비교?그때문인거같은데 저 case문에선 어떤부분인지 정확히 잘 모르겠어서 질문올립니다 ㅠ

by 마농 [2021.01.08 16:11:26]

○ 에러 발생 가능성 있는 부분
1. TO_CHAR(birth_date, 'mmdd') 에서 birth_date 가 문자인 경우
2. TO_DATE( TO_CHAR( SYSDATE , 'YYYY') || '0301' ) 날짜 포멧이 지정되지 않음
3. 기타 모든 TO_DATE() 함수 사용시 포멧 지정이 없음
- 변경전 : TO_DATE('20210301')
- 변경후 : TO_DATE('20210301', 'yyyymmdd')
○ 기타.
- 주석이 좀 이상하게 되어 있고
- 쿼리가 너무 복잡하네요. 간결하게 작성할 필요가 있습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입