IT/DB

[ORACLE] 에러 ORA-01861: literal does not match format string

타미미 2021. 12. 9. 17:39

[상황]

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 테이블;

 

 

반응형