728x90
📌 TO_DATE
- TO_DATE는 문자열을 날짜형으로 변환하는 Oracle 내장 함수입니다.
- 잘못된 포맷이나 입력 값으로 인해 에러가 자주 발생하므로, 정확한 포맷 사용이 중요합니다.
- 본 글에서는 TO_DATE 함수의 사용법, 포맷 종류, 예외 상황 등을 설명합니다.
🔹 1. TO_DATE 함수란?
TO_DATE 함수는 문자열(String)을 날짜(Date) 형식으로 변환합니다.
-- TO_DATE(문자열, '날짜 형식')
SELECT TO_DATE('2025-05-02', 'YYYY-MM-DD') FROM DUAL;
🔹 2. 자주 사용하는 날짜 포맷
포맷 코드의미예시
포맷 코드 | 의미 | 예시 |
YYYY | 연도 (4자리) | 2025 |
YY | 연도 (2자리) | 25 |
MM | 월 (2자리) | 05 |
DD | 일 (2자리) | 02 |
HH24 | 시간 (24시간제) | 14 |
MI | 분 | 30 |
SS | 초 | 00 |
🔹 3. 기본 사용 예제
-- 날짜만 변환
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;
🔹 4. 자주 발생하는 오류와 해결 방법
ORA-01843: 지정한 월이 부적합합니다
- 원인: 입력 문자열과 포맷이 일치하지 않을 때 발생
- 해결: 문자열과 포맷을 정확히 맞춰야 함
-- ❌ 에러: 포맷은 '-'인데 문자열은 '/' 사용
SELECT TO_DATE('2025/05/02', 'YYYY-MM-DD') FROM DUAL;
-- ✅ 수정:
SELECT TO_DATE('2025/05/02', 'YYYY/MM/DD') FROM DUAL;
🔹 5. 시간 비교를 위한 사용
-- 오늘과 특정 날짜를 비교
SELECT SYSDATE - TO_DATE('2025-05-01', 'YYYY-MM-DD') FROM DUAL;
결과는 날짜 간 차이 (일 단위)로 반환됩니다.
🔹 6. 밀리초가 있는 경우?
- TO_DATE는 밀리초(.000)를 처리하지 못합니다.
- 이런 경우에는 TO_TIMESTAMP를 사용해야 합니다.
SELECT TO_TIMESTAMP('2025-05-02 14:30:00.123', 'YYYY-MM-DD HH24:MI:SS.FF3') FROM DUAL;
🔹 7. 날짜 → 문자열 변환 (반대 함수: TO_CHAR)
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
🔖 마무리 요약
- TO_DATE는 문자열을 날짜로 바꿀 때 필수
- 포맷과 문자열은 정확히 일치해야 함
- 시간/분/초까지 필요한 경우 포맷 확장
- 밀리초는 TO_TIMESTAMP를 사용해야 함
실무에서 날짜 문자열을 변환하는 일은 생각보다 자주 발생합니다.
TO_DATE 함수는 단순하지만 포맷 실수가 잦은 함수이니, 위에서 소개한 방식대로 포맷을 정확히 지정해주는 습관을 들이면 에러 없는 SQL 작성이 가능합니다!
728x90
'BackEnd > DB(SQL)' 카테고리의 다른 글
[Oracle] ORA-01438 오류 해결 – 숫자 컬럼 크기 초과 문제 잡기 (0) | 2025.05.22 |
---|---|
[Oracle] PL/SQL 로그 사용하기 – DBMS_OUTPUT.PUT_LINE() 완전 정복 (3) | 2025.05.21 |
ORA-01843: 지정한 월이 부적합합니다 – 날짜 포맷 불일치 해결법 총정리 (2) | 2025.05.19 |
Oracle JOIN 문법 총정리: ANSI vs Oracle 방식 완전 정복 (1) | 2025.05.13 |
Oracle JOIN 문법 총정리: ANSI vs Oracle 방식 완전 정복 (0) | 2025.04.22 |