728x90
반응형
oracle의 regexp_substr함수로 string에 날짜가 포함되어있는 경우 날짜만 추출하는 방법을 알아보겠습니다.
우선 test_c 라는 테이블에 아래와 같이 데이터가 들어가 있다고 가정합니다.
value값에
aa_08_2023
aa_aa_aa_202308
aa_aa_aa_2023_08
aa_aa_aa_20230803
이런식으로 문자와 날짜데이터가 동시에 들어가 있는 경우 날짜만을 추출하고 싶을 때
아래와 같은 sql문을 작성하여 조회할 수 있습니다.
SELECT
CASE
WHEN regexp_substr(value, '([0-9]{4}_[0-9]{2})') IS NOT NULL
THEN to_date(regexp_substr(value, '([0-9]{4}_[0-9]{2})'), 'yyyy-mm')
WHEN regexp_substr(value, '([0-9]{2}_[0-9]{4})') IS NOT NULL
THEN to_date(regexp_substr(value, '([0-9]{2}_[0-9]{4})'), 'mm-yyyy')
WHEN regexp_substr(value, '([0-9]{4}[0-9]{2}[0-9]{2})') IS NOT NULL
THEN to_date(regexp_substr(value, '([0-9]{4}[0-9]{2}[0-9]{2})'), 'yyyymmdd')
WHEN regexp_substr(value, '([0-9]{4}[0-9]{2})') IS NOT NULL
THEN to_date(regexp_substr(value, '([0-9]{4}[0-9]{2})'), 'yyyymm')
END AS dt,
value
FROM test_c;
regexp_substr('컬럼 또는 값', 정규식) 형식으로 이루어져있으며
이번에 알아볼 정규식의 포멧은 [조회할 값]{연속된 개수} 입니다.
조회할 값에 '0-9' 라는 것은 0부터 9까지의 숫자중 이라는 뜻입니다.
따라서
[0-9] 의 경우 0부터 9까지의 숫자중
{4} 번 연속된 경우를 조회하는 것입니다.
첫번째
[0-9]{4}_[0-9]{2} : '4번의 연속된 숫자' + '_' + '2번의 연속된 숫자' 라는 뜻입니다.
위 sql로 조회를 하면
위와같은 결과를 확인 할 수 있습니다.
728x90
반응형
'DB (데이터베이스) > Oracle (오라클)' 카테고리의 다른 글
[Oracle] oracle 리스터 포트 변경방법 (0) | 2024.03.15 |
---|---|
[Oracle] regexp_substr로 특정 문자 기준으로 문자열 자르기 (1) | 2024.03.15 |
[Oracle] oracle AWRRPT 사용 기록 확인 (0) | 2024.02.02 |
[Oracle] oracle drop user시 ORA-06904 발생 해결 (0) | 2024.01.29 |
[Oracle] oracle statspack 설치 (0) | 2024.01.29 |