[Oracle] 오라클 TO_DATE() 함수 사용법, 문자열 날짜 변환하는 법

TO_DATE() 함수

TO_DATE() 함수는 문자열 데이터를 일정 포맷의 날짜 타입으로 변환하는 함수이다.

 

예를 들어 아래와 같이 문자열을 날짜 타입으로 바꿀수 있다.

SELECT TO_DATE('2023-10-12', 'YYYY-MM-DD')
FROM DUAL;

 

아래 표에 나온 것처럼 특정 문자열을 날짜 타입으로 변환할 수 있다. 이때 문자열과 날짜 타입의 포맷이 일치해야 한다.

 

포맷 설명
YYYY/YY/YEAR 년도(4자)/년도(뒤 2자)/문자년도
MONTH/MON/MM/RM 달(이름/약어/숫자/로마 기호)
DDD/DD/D 일(1년 기준/1달 기준/1주 기준)
DAY/DY  요일(이름/약어)
HH/HH24 12시간/24시간 표준
MI 분(0~59)
SS 초(0~59)

 

 

예시

SELECT TO_DATE('2023-10-12', 'YYYYMMDD')	// 오류 발생
FROM DUAL;

위 예시를 보면 문자열과 날짜 타입의 포맷이 일치하지 않는다. 

 

TO_DATE 에러
[그림 1] 에러

따라서 ORA-01843 에러가 발생한다. 

 

SELECT TO_DATE('2023-10-12', 'YYYY-MM-DD')
FROM DUAL;

위와 같이 변환해야 정상적으로 동작한다.

 

 

응용

SELECT *
FROM HR.EMPLOYEES
WHERE HIRE_DATE >= TO_DATE('2008-01-01', 'YYYY-MM-DD') -- 2008년 이후 입사자

TO_DATE 함수는 주로 DATE 칼럼과의 비교를 위해 사용하는 경우가 많다. 

 

위 쿼리를 실행하면 아래와 같이 결과가 잘 나온다.

TO_DATE 결과
[그림 2] TO_DATE 결과

 

SELECT *
FROM HR.EMPLOYEES
WHERE HIRE_DATE >= '2008-01-01'

 

만약 DATE 칼럼을 일반 문자열과 비교하면 어떻게 될까?

DATE 칼럼 비교
[그림 3] DATE 칼럼 비교

 

DATE 칼럼과 문자열을 비교하면 위와 같이 ORA-01861 오류가 발생한다. 

데이터 타입이 맞지 않기 때문에 발생하는 문제이다.

 

따라서 DATE 칼럼을 비교하기 위해서는 TO_DATE() 함수를 사용해야한다.

 

SELECT *
FROM HR.EMPLOYEES
WHERE TO_CHAR(HIRE_DATE, 'YYYY-MM-DD') >= '2008-01-01'

물론 DATE 칼럼을 TO_CHAR() 함수를 사용해서 비교해도 결과는 아래와 같다.

 

TO_CHAR 함수 이용
[그림 4] TO_CHAR 함수 이용

 

하지만 위와 같이 칼럼을 가공하는 것은 성능상 좋지 않다.

 

그 이유가 궁금하다면 다음 글을 참고하자.

 

 

반응형

댓글

Designed by JB FACTORY