본문 바로가기

BackEnd/DB(SQL)

[Oracle] 오라클 TO_DATE 함수 – 문자열을 날짜로 정확하게 변환하는 방법

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