[개발] 프로그램 지식

[ORACLE] date not valid for month specified 오류 해결 방법

  • -
반응형

📅 Oracle SQL "Date not valid for month specified" 오류 해결 방법

Oracle 데이터베이스를 사용하다 보면 **"Date not valid for month specified"** 오류를 만날 수 있습니다. 이 오류는 특정한 날짜 값이 **잘못된 형식**이거나 **존재하지 않는 날짜**일 때 발생합니다.

 

ex. 20250230인 경우

202502 / 30 분리 후 addmonth계산 후 끝 일자 붙이는 식으로 해결 가능

이 오류는 주로 **TO_DATE 함수**를 사용할 때 발생하며, 대표적인 원인은 다음과 같습니다.

  • 잘못된 날짜 입력 (예: 2024년 2월 30일 → 존재하지 않는 날짜)
  • 월(MM)과 일(DD) 순서 오류 (예: DD/MM/YYYY 형식인데 MM/DD/YYYY로 입력됨)
  • 기본 날짜 형식과 다른 형식 사용 (예: 'YYYY-MM-DD'가 아닌 'DD-MON-YYYY' 사용)
  • 잘못된 월(MM) 값 (예: 13월 같은 존재하지 않는 월 입력)
SELECT TO_DATE('2024-02-30', 'YYYY-MM-DD') FROM dual;

👆 2월 30일은 존재하지 않는 날짜이므로 오류가 발생합니다.

올바른 날짜를 입력하세요.

SELECT TO_DATE('2024-02-28', 'YYYY-MM-DD') FROM dual;
SELECT TO_DATE('31-12-2024', 'YYYY-MM-DD') FROM dual;

👆 'YYYY-MM-DD' 형식인데, 실제 값은 **'DD-MM-YYYY'**이므로 오류 발생!

날짜 형식을 올바르게 지정하세요.

SELECT TO_DATE('31-12-2024', 'DD-MM-YYYY') FROM dual;
SELECT TO_DATE('2024-13-10', 'YYYY-MM-DD') FROM dual;

👆 13월은 존재하지 않기 때문에 오류 발생!

올바른 월을 입력하세요.

SELECT TO_DATE('2024-12-10', 'YYYY-MM-DD') FROM dual;

Oracle에서는 기본 날짜 형식이 다를 수 있습니다. 현재 세션의 날짜 형식을 확인하려면 아래 명령어를 사용하세요.

SELECT * FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT';

날짜 형식을 일관되게 맞추기 위해 **NLS_DATE_FORMAT**을 변경할 수 있습니다.

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';

날짜 값이 NULL이거나 잘못된 경우를 대비해 **CASE 문**을 사용할 수도 있습니다.

SELECT CASE WHEN REGEXP_LIKE(my_date_column, '^\d{4}-\d{2}-\d{2}$') THEN TO_DATE(my_date_column, 'YYYY-MM-DD') ELSE NULL END AS formatted_date FROM my_table;

Oracle SQL에서 **"Date not valid for month specified"** 오류가 발생하는 주요 원인은 **잘못된 날짜 값, 형식 오류, 존재하지 않는 날짜 입력**입니다. 이를 방지하려면:

  • ✅ 날짜를 입력할 때 올바른 형식을 사용하세요.
  • TO_DATE() 함수의 포맷이 데이터와 일치하는지 확인하세요.
  • NLS_DATE_FORMAT을 확인하여 올바른 날짜 형식을 적용하세요.
  • ✅ NULL 값이나 잘못된 데이터를 대비해 예외 처리를 고려하세요.

이제 날짜 관련 오류 없이 Oracle SQL을 사용할 수 있습니다! 😊

반응형

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.