Oracle/Oracle 실무
[ DB | ORACLE ] DATE 형식이 맞는데 날짜 형식 지정에 불필요한 데이터가 포함되었다고 뜰 때
냠냠쿠
2024. 1. 8. 16:48
728x90
ORA-01830: 날짜 형식의 지정에 불필요한 데이터가 포함되어 있습니다
01830. 00000 - "date format picture ends before converting entire input string" *Cause: *Action:
일단 데이터 형식은 20240108100641 이런식으로 들어왔다.
SELECT COUNT(*)
FROM 테이블명
WHERE REG_DATE LIKE '20240108%'
and TO_DATE(REG_DATE,0,14, 'YYYYMMDDHH24MISS') >= SYSDATE - INTERVAL '3' MINUTE
이게 기존 쿼리였는데 테스트 데이터의 데이터가 잘못들어오면서 쿼리가 계속 깨졌다.
SELECT COUNT(*)
FROM 테이블명
WHERE REG_DATE LIKE '20240108%'
and TO_DATE(REG_DATE, 'YYYYMMDDHH24MISS') >= SYSDATE - INTERVAL '3' MINUTE
AND USER_ID not like '%test%'
그래서 위와 같이 USER_ID가 테스트인것은 빼고 추출하려고 했는데 계속 날짜형식이 안맞단다.
서브쿼리로 가둬도 봤다.
SELECT COUNT(*)
FROM (SELECT *
FROM 테이블
WHERE USER_ID NOT LIKE '%test%'
AND REG_DATE LIKE '20240108%')
WHERE TO_DATE(REG_DATE, 'YYYYMMDDHH24MISS') >= SYSDATE - INTERVAL '3' MINUTE;
그래도 안맞단다.
서브쿼리만 조회해서 봤을 때 이미 이상한 데이터 형식은 다 걸러졌었고, 정상적인 형식의 데이터만 들어왔었는데 왜?????
한참을 쿼리 돌려보다가 선배님께 여쭤봤더니 DATE를 SUBSTR으로 잘라보라고 하셨다.
SELECT COUNT(*)
FROM 테이블명
WHERE REG_DATE LIKE '20240108%'
AND TO_DATE(SUBSTR(REG_DATE,0,14), 'YYYYMMDDHH24MISS') >= SYSDATE - INTERVAL '3' MINUTE
AND USER_ID not like '%test%'
그랬더니 돌아간다...환장하겠네 진짜..
DATE 형식이 맞는데도 안맞다고나오면 SUBSTR을 이용해서 잘라보자
728x90