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