[상황]
SELECT LAST_DAY(날짜컬럼) FROM 테이블;
SELECT TO_DATE(날짜컬럼) FROM 테이블;
위의 두개의 쿼리 수행 시
ORA-01861: literal does not match format string 오류 발생 (날짜 컬럼의 데이터 타입은 VARCHAR)
[원인]
DATE FROMAT 설정 또는 TO_DATE 변환형식을 입력하지 않았기 때문.
'날짜컬럼'에 TO_DATE 할 수 없는 오류 데이터가 들어있을 때도 해당 오류가 출력될 수 있다.
[해결방법]
첫번째 방법: NLS_DATE_FORMAT 을 변경한다. (DB 설정을 변경해도 괜찮은 경우.. 영향도 고려 필요)
NLS_DATE_FORMAT 을 데이터에 따라 알맞게 수정한다.
time 데이터도 있으면, NLS_TIME_FORMAT 과NLS_TIMESTAMP_FORMAT 변경이 필요할 수도 있다.
<현재 설정정보 확인 SQL> - 혹시 모르는 상황을 대비해 기존 설정정보를 따로 적어두면 좋다😀
SELECT *
FROM NLS_SESSION_PARAMETERS;
<변경 예시 SQL>
ex)
ALTER SESSION SET NLS_DATE_FORMAT = 'RR/MM/DD';
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
두번째 방법: SQL을 수정한다.
ex)
(오류 SQL) SELECT LAST_DAY(날짜컬럼) FROM 테이블;
(정상 SQL) SELECT LAST_DAY(TO_DATE(날짜컬럼), 'YYYY-MM-DD')) FROM 테이블;
(오류 SQL) SELECT TO_DATE(날짜컬럼) FROM 테이블;
(정상 SQL)SELECT TO_DATE(날짜컬럼, 'YYYY-MM-DD') FROM 테이블;
반응형