목록전체 글 (71)
IT'S YU
ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 위 오류는 날짜형식 컬럼이 SELECT절에서 사용되지 않았더라도 WHERE절에서 조건 사용될 경우 발생할 수 있음,, ex> 데이터타입이 VARCHAR2(30 BYTE), 실제 데이터값은 '9999-12-31'인 컬럼 'A_DATE'에 대하여 SQL 작성시 ---> 수정 전 : SELECT * FROM TEST_TABLE WHERE 1=1 AND A_DATE >= TO_DATE('20210101','YYYYMMDD') AND A_DATE 수정 후 : SELECT * FROM TEST_TABLE WHERE 1=1 AND A_DATE >= '2021-01-01' AND A_DATE
발생원인 1. 테이블의 컬럼 타입과 입력한 데이터의 타입이 다를 경우 - date 타입의 컬럼에 문자열 타입의 데이터를 입력한 경우 - date 타입으로 지정한 데이터가 null 값인 경우 2. 데이터의 크기가 오라클의 MAX값을 초과한 경우 - date의 max값인 '99991231' 이상의 일자를 등록하려 하는 경우 내 경우는 2번으로 추정돼서 날짜 기간을 현재까지로 한정하니 오류 없이 실행됐음 출처 : https://jujoo17.tistory.com/56 [Error] ORA-01841: (full) year must be between -4713 and +9999, and notbe 0 에러 ORA-01841: (full) year must be between -4713 and +9999, an..
LISTAGG 내에서는 DISTINCT 구문 먹히지 않아서 아래와 같은 정규식 구문으로 중복 제거 가능 regexp_replace(LISTAGG(컬럼명, ',') WITHIN GROUP(ORDER BY 컬럼명), '([^,]+)(,\1)+', '\1') regexp_replace(LISTAGG(컬럼명, ',') WITHIN GROUP(ORDER BY 컬럼명), '([^,]+)(,\1)*(,|$)', '\1\3') 근데 경우에 따라서 위 정규식도 안먹히는 경우가 있음.. WM_CONCAT은 WM_CONCAT(DISTINCT 컬럼명) 가능하지만 구분자가 ',' 으로만 출력됨 한줄로 출력해야하는 데이터 내에 콤마(,)가 있는 경우는 LISTAGG를 쓸 수 밖에 없음 이 경우엔 최후의 수단으로 1. 해당 컬럼의..
기본 문법 SELECT REGEXP_REPLACE([컬럼명], '[변경하고 싶은 값1]|[변경하고 싶은 값2]', [변경된 값]) AS [컬럼명] FROM [테이블명] ; 1. 숫자를 전부 특정 문자로 변경 ( 중간에 .이 들어간 소수는 뒷자리 변경안됨 ) SELECT regexp_replace([컬럼명], '[[:digit:]]+', [변경값]) FROM [테이블명]; 2. 숫자를 제외한 모든(문자/특수문자)를 제거 SELECT regexp_replace([컬럼명], '\D', [변경값], 'g') FROM [테이블명]; 3. 특수문자 제거 SELECT regexp_replace([컬럼명], '[^a-zA-Z0-9가-힣]', '') FROM [테이블명]; ->영문, 숫자, 한글은 살리고 공백, 특문 전..