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;
🎯 팁: 디버깅 순서
- 문자열과 포맷이 정확히 일치하는지 확인
- 구분자(/, -, . 등)를 정확히 맞췄는지 확인
- MM, DD, YYYY 순서를 바꿔 쓰지 않았는지 확인
- 월/일이 숫자 범위를 벗어나지 않았는지 확인 (예: 00, 13, 32 등)
날짜 포맷 오류는 사소해 보이지만, 실무에서 자주 발생하는 문제입니다.
ORA-01843 에러가 떴다면, 문자열과 포맷 문자열을 먼저 하나하나 꼼꼼히 맞춰보는 습관이 중요합니다!
728x90