오라클 데이터베이스를 사용하다 보면 날짜 형식과 관련된 오류를 자주 접하게 됩니다. 특히, 'ORA-01861: 리터럴이 형식 문자열과 일치하지 않음' 오류는 날짜 관련 연산에서 빈번히 발생하는데요, 이 오류의 원인과 해결 방법을 알아보도록 하겠습니다.
ORA-01861 원인
예를 들어, 다음과 같은 쿼리를 실행할 때 오류가 발생합니다. 🙂
INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (9999, 'TEST', 'CLERK', 7839, '2001-01-01 01:01:01', 800, NULL, 10);
ERROR at line 1:
ORA-01861: literal does not match format string
오류는 대부분 날짜 관련된 상황에서 많이 발생하는데요, 주된 원인은 다음과 같습니다. 🙂
DATE 타입 컬럼에 CHAR 데이터가 입력된 경우
HIREDATE 컬럼의 데이터 타입이 DATE인데, 데이터가 DATE 타입이 아닌 CHAR 으로 입력되어 오류가 발생할 수 있습니다.
CHAR 타입 컬럼에 DATE 데이터가 입력된 경우
반대로, CHAR 타입 컬럼에 DATE 타입 데이터를 입력하려고 시도할 때에도 같은 오류가 발생할 수 있습니다.
ORA-01861 오류 해결 방법
이 문제를 해결하려면 데이터 타입을 일치시켜야 합니다. 즉, CHAR 데이터를 DATE 타입으로 변환하거나, DATE 데이터를 CHAR 타입으로 변환해야 합니다.
CHAR 데이터를 DATE 타입으로 변환
다음과 같이 TO_DATE 함수를 사용하여 문자열을 DATE 타입으로 변환할 수 있습니다. 다음과 같이 HIREDATE 컬럼(데이터타입: DATE)에 대해, 문자열을 DATE 타입으로 변환하여 입력해 보았습니다.
INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (9999, 'TEST', 'CLERK', 7839, TO_DATE('2001-01-01 01:01:01', 'YYYY-MM-DD HH24:MI:SS'), 800, NULL, 10);
1 row created.
DATE 데이터를 CHAR 타입으로 변환
반대로, DATE 데이터를 CHAR 타입으로 변환할 때는 TO_CHAR 함수를 사용할 수 있습니다. 다음 쿼리는 현재 날짜와 시간을 지정된 형식의 문자열로 변환합니다.
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'
--------------------------------------
2001-01-01 01:01:01
참고 사항
데이터 타입이 일치하도록 TO_DATE 또는 TO_CHAR 함수를 사용하여 변환해 보세요.
DATE 타입의 데이터를 처리할 때는 형식 문자열과 일치하는지 확인합니다.
이와 같은 방법으로 'ORA-01861' 오류를 해결할 수 있을 거예요. 🙂 데이터 타입 일치를 확인하여 해결할 수 있답니다.
