728x90
반응형
ORA-01861 : 리터럴이 형식 문자열과 일치하지 않음 (해결방법)
ORA-01861: literal does not match format string
발생 원인
1. 문자열(VARCHAR2) 타입과 DATE 타입을 비교할 때
2. DATE 타입에 문자열(VARCHAR2) 타입의 데이터를 삽입할 때
컬럼명(Column) | 데이터 타입(Data Type) |
NAME | VARCHAR2(10) |
INSERT_DATE | DATE |
테이블(TEMP) 컬럼은 위와 같은 구성이라 가정합니다.
테스트 케이스
-- 1. 문자열(VARCHAR2) 타입과 DATE 타입을 비교할 때
SELECT *
FROM TEMP
WHERE NAME = SYSDATE;
SELECT *
FROM TEMP
WHERE INSERT_DATE > '2021-08-10';
-- 2. DATE 타입에 문자열(VARCHAR2) 타입의 데이터를 삽입할 때
INSERT
INTO TEMP(INSERT_DATE)
VALUES ('2021-08-10');
해결 방법
비교하는 대상의 타입을 일치시켜줍니다.
TO_DATE() : 날짜 형식으로 타입 변경
TO_CHAR() : 문자열 형식으로 타입 변경
-- 1. 문자열(VARCHAR2) 타입과 DATE 타입을 비교할 때 (해결방법)
SELECT *
FROM TEMP
WHERE NAME = TO_CHAR(SYSDATE);
SELECT *
FROM TEMP
WHERE INSERT_DATE > TO_DATE('2021-08-10','YYYY-MM-DD');
-- 2. DATE 타입에 문자열(VARCHAR2) 타입의 데이터를 삽입할 때 (해결방법)
INSERT
INTO TEMP(INSERT_DATE)
VALUES (TO_DATE('2021-08-10','YYYY-MM-DD'));
필자는 오라클 11g 버전을 사용하고 있는데,
VARCHAR2 타입에 DATE 타입을 삽입할 때는 정상 동작하네요!
-- VARCHAR2에 SYSDATE 삽입 시 정상 동작
INSERT
INTO TEMP(NAME)
VALUES (SYSDATE);
INSERT
INTO TEMP(NAME)
VALUES (TO_DATE('2021-08-10','YYYY-MM-DD'));
자주 만나볼 수도 있는 오류인데, 대부분 개발자의 실수로 발생되는 것 같다.
항상 데이터 간 타입 및 크기를 고려하고 적절한 형 변환 함수를 사용하자.
728x90
반응형
'Oracle' 카테고리의 다른 글
[Oracle] ORA-00001 : 유일성(무결성) 제약조건에 위배됩니다 (0) | 2021.08.07 |
---|---|
[Oracle] ORA-08002 시퀀스 SEQ.currval 은 이 세션에서는 정의되어 있지 않습니다 (0) | 2021.08.07 |
[Oracle] ORA-00947 : 값의 수가 충분하지 않습니다. (0) | 2021.08.01 |
[Oracle] 오라클 에러 발생 시 해결방법 (2) | 2021.08.01 |
[Oracle] ORA-01476 : 제수가 0 입니다(divisor is equal to zero) (0) | 2021.07.31 |
댓글