BackEnd/DB(SQL)

ORA-01843: 지정한 월이 부적합합니다 – 날짜 포맷 불일치 해결법 총정리

bobo12 2025. 5. 19. 19:09
728x90

🔍 에러 메시지 설명

  • 오류 코드: ORA-01843
  • 오류 내용: "지정한 월이 부적합합니다"
  • 원인 요약: TO_DATE() 또는 TO_TIMESTAMP() 등을 사용할 때, 입력 문자열과 날짜 포맷이 맞지 않아 Oracle이 ‘월’인식하지 못할 발생

 

💣 자주 발생하는 상황

1. 구분자가 다른 경우

-- ❌ 에러 발생 
SELECT TO_DATE('2025/05/02', 'YYYY-MM-DD') FROM DUAL;
  • 문자열은 /구분되어 있는데
  • 포맷은 -되어 있어 월을 올바르게 파싱하지 못함

 

2. 월/위치가 잘못된 경우

-- ❌ 에러 발생 (MM-DD-YYYY로 잘못 지정)
SELECT TO_DATE('2025-31-12', 'YYYY-MM-DD') FROM DUAL;
  • 31월로 인식하려고 하다가 실패 → 에러

 

3. 포맷은 맞는데 입력 값이 잘못된 경우

-- ❌ 에러 발생 (13월은 존재하지 않음)
SELECT TO_DATE('2025-13-01', 'YYYY-MM-DD') FROM DUAL;
  • 13이라는 월이 존재하지 않아서 에러 발생

 

해결 방법

문제 유형 해결 방법 예시
구분자 불일치 포맷 문자열을 입력값과 일치시킨다
'2025/05/02''YYYY/MM/DD'
MM/DD/DD 위치 오류 포맷에서 월/일/위치 정확히 맞춘다
비정상 입력 검증 TO_DATE() 사용 (숫자 범위 확인)

 

올바른 예제들

-- 올바른 형식 (하이픈)
SELECT TO_DATE('2025-05-02', 'YYYY-MM-DD') FROM DUAL;

-- 슬래시 구분자일 경우
SELECT TO_DATE('2025/05/02', 'YYYY/MM/DD') FROM DUAL;

-- 시분초 포함
SELECT TO_DATE('2025-05-02 14:30:00', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

 

 

🎯 팁: 디버깅 순서

  1. 문자열과 포맷이 정확히 일치하는지 확인
  2. 구분자(/, -, . 등)정확히 맞췄는지 확인
  3. MM, DD, YYYY 순서를 바꿔 쓰지 않았는지 확인
  4. 월/일이 숫자 범위를 벗어나지 않았는지 확인 (예: 00, 13, 32 등)

 

날짜 포맷 오류는 사소해 보이지만, 실무에서 자주 발생하는 문제입니다.
ORA-01843 에러가 떴다면, 문자열과 포맷 문자열을 먼저 하나하나 꼼꼼히 맞춰보는 습관이 중요합니다!

728x90