SQL에서 날짜 포맷을 바꾸고 싶을 때 자주 쓰는 함수 - TO_DATE()와 TO_CHAR()
하지만 이 두 함수를 혼용할 때, 잘못 쓰면 날짜가 엉뚱하게 바뀌는 오류가 발생할 수 있음
예시
SELECT TO_CHAR(TO_DATE(HIRE_YMD, 'YYYY-MM-DD'), 'YYYY-MM-DD')
FROM DOCTOR;
결과
- HIRE_YMD가 2010-07-01이었는데
- 결과는 0001-07-10처럼 완전히 다른 날짜로 출력됨
왜 이런 일이 생기는가?
HIRE_YMD는 이미 DATE 타입인데 여기에 TO_DATE()를 다시 쓰면
Oracle은 이 값을 암묵적으로 문자열로 변환한 뒤 다시 DATE로 바꾸려 함
→ 내부 해석이 꼬이면서 이상한 날짜가 나옴
올바른 방법은?
출력 형식을 바꾸고 싶다면 TO_CHAR()만 사용해야 함
SELECT TO_CHAR(HIRE_YMD, 'YYYY-MM-DD') AS HIRE_YMD
FROM DOCTOR;
정리
| 문자열 → DATE | TO_DATE('2021-01-01', 'YYYY-MM-DD') |
| DATE → 포맷 지정 출력 | TO_CHAR(HIRE_YMD, 'YYYY-MM-DD') |
| DATE에 TO_DATE() 사용 | 오류 발생 위험 |
'DB > Oracle - SQL' 카테고리의 다른 글
| Oracle SQL | DECODE vs CASE WHEN – 문자열 패턴 비교 시 주의할 점 (0) | 2025.05.23 |
|---|---|
| Oracle SQL | Oracle Join vs ANSI Join 차이와 정리 (0) | 2025.05.08 |
| Oracle SQL | TO_DATE로 날짜 필터링할 때 오류 방지하는 방법 (0) | 2025.05.06 |
| Oracle SQL | WHERE 절에 조건 여러 개 쓰는 법 (AND, OR, BETWEEN, 괄호까지) (1) | 2025.05.06 |
| Oracle SQL | NVL / NVL2 / DECODE 함수로 NULL을 다루는 방법 (0) | 2025.05.06 |