실무에서 발생하는 에러중 “ORA-01861: literal does not match format string” 에러를 자주 마주하고는 한다. 이 에러가 무슨 에러인지 에러 메시지를 분석해보고 문제의 원인을 찾아본 후 해결해보도록 해보자.
에러메시지:
ORA-01861: literal does not match format string
문제발생
ORA-01861: literal does not match format string
모든 프로그램에서 문제가 발생했을때 제일 중요한점은 에러로그를 확인하고 그 에러로그의 뜻과 원인을 정확히 파악 후 해결하는것이 중요하다. 아래는 에러로그를 번역해본것이다. 그럼 위 에러 메시지를 한국어를 그대로 번역해보면 “리터럴이 형식 문자열과 일치하지 않음” 이라는 뜻이다. 번역을 풀어보니 리터럴의 형식이 비교되는 값의 형식인 문자형식과 일치하지 않는다는 뜻이다.
리터럴(literal): 데이터(값) 그 자체를 뜻한다.
문제원인
원인은 번역 그대로 컬럼의 형식은 STRING형식인데 비교하는 값의 타입은 DATE일때 비교 하고자 하는 서로의 데이터 타입 형식이 맞지 않을때 발생한다. 아래 예시를 통해서 알아보자.
SELECT * FROM TABLE_NAME
WHERE DATE = TO_DATE('2023-01-01', 'YYYYMMDD')
이렇게 [TABLE_NAME = 테이블]의 [DATE = 컬럼]의 형식은 STRING이고 비교 하고자 하는 값은 DATE형 일때 이와 같은 에러가 발생한다.
문제해결
그러면 우리는 문제를 해결하기위해 비교 하고자 하는 값의 형식을 아래 코드와 같이 DATE형식이 아닌 STRING형식으로 변경하여 비교해야한다.
SELECT * FROM TABLE_NAME
WHERE DATE = TO_CHAR(TO_DATE('2023-01-01'),'YYYYMMDD')
이런식으로 DATE컬럼의 형식인 STRING형식과 비교되는 값을 STRING으로 형변환을 시킨다면 에러없이 쿼리문을 실행시킬 수 있다.