728x90
반응형
MySQL 환경에서 썼던 쿼리를 그대로 옮겼을 때 에러가 발생했다.
MySQL과 Oracle의 날짜 처리는 조금 다릅니다.
차이점
- MySQL: 잘못된 날짜를 사용할 경우 기본적으로 자동으로 가장 가까운 유효 날짜로 보정합니다. 예를 들어, 2025-02-31은 MySQL에서 자동으로 2025-02-28로 변환되며, 오류 없이 실행됩니다.
- Oracle: 유효하지 않은 날짜는 오류 (ORA-01839)를 발생시킵니다. Oracle은 명시적으로 정확한 날짜를 지정해야 합니다.
MySQL에서 정상 작동했던 이유
MySQL은 다음과 같은 상황에서 유연하게 처리합니다:
- '2025-02-31' → '2025-02-28'로 자동 수정
- 월과 일이 벗어난 경우에도 자동으로 조정
Oracle에서 해결 방법
Oracle에서는 유효하지 않은 날짜를 처리하기 위해 다음과 같은 방법이 필요합니다:
- LAST_DAY 함수 사용
LAST_DAY를 사용하면 해당 월의 마지막 날을 동적으로 계산할 수 있습니다:LAST_DAY(TO_DATE('2025-02', 'YYYY-MM'))
- 명시적으로 유효 날짜 설정
MySQL과 다르게 Oracle에서는 직접 날짜를 지정해야 하기 때문에 아래와 같이 수정해야 합니다: - 유효하지 않은 날짜 방어 코드 추가 날짜가 동적으로 결정될 때는 마지막 날을 계산해 입력하는 것이 안전합니다.
Oracle에서 MySQL과 동일하게 동작하려면 LAST_DAY()를 사용하는 방식이 가장 적합합니다.
728x90
반응형