[Oracle] 오라클 문자를 날짜로 변환 방법 (TO_DATE)
- 데이터베이스/오라클
- 2021. 12. 12.
오라클에서 문자열을 날짜형 데이터로 형 변환을 하기 위해서는 TO_DATE 함수를 사용하면 된다.
TO_DATE("문자열", "날짜 포맷")
아래의 예제를 보면 쉽게 이해할 수 있다.
SELECT TO_DATE('2021-12-12', 'YYYY-MM-DD')
, TO_DATE('2021-12-12 17:10:00', 'YYYY-MM-DD HH24:MI:SS')
FROM dual
오라클에서는 날짜 포맷의 대소문자를 구분하지 않는다.
'YYYY-MM-DD HH24:MI:SS' → 'yyyy-mm-dd hh24:mi:ss'로 변경해도 정상적으로 작동한다.
날짜의 시간이 12시간 단위면 hh24:mi:ss → hh:mi:ss로 변경하면 된다.
SELECT TO_DATE('20211212', 'YYYYMMDD')
, TO_DATE('20211212171000', 'YYYYMMDDHH24MISS')
FROM dual
날짜의 구분자를 사용하지 않고 사용할 수 있다.
SELECT TO_DATE('2021/12/12', 'YYYY/MM/DD')
, TO_DATE('12/12/2021', 'MM/DD/YYYY')
FROM dual
년/월/일의 위치를 변경하여 포맷을 정의할 수 있다.
SELECT TO_DATE('19/12/11', 'RR/MM/DD')
, TO_DATE('21/12/12', 'RR/MM/DD')
FROM dual
년도(YYYY)의 포맷을 RR로 사용할 경우 50~99년은 1900년대로, 00~49년은 2000년대로 변환된다.
SELECT TO_DATE('2021-12-12')
FROM dual
TO_DATE 함수를 사용할 때 날짜 포맷 없이 사용할 수 있다. (날짜 포맷을 지정할 것을 권장)
그러나 시스템의 설정된 날짜 형식과 일치하지 않은 문자열 값인 경우 오류가 발생할 수 있으니 주의해야 한다.
ORA-01861: literal does not match format string (리터럴이 형식 문자열과 일치하지 않음)
SELECT *
FROM nls_session_parameters
WHERE parameter = 'NLS_DATE_FORMAT'
시스템의 NLS_DATE_FORMAT이 어떻게 설정되어 있는지 확인 후 동일한 형식으로 문자열을 입력하면 오류가 발생하지 않는다.
날짜 문자열이 아닌 값이 존재할 경우 문자열의 날짜 형식을 미리 체크한 후 변환을 해야 오류를 방지할 수 있다.