DB (데이터베이스)/Oracle (오라클)

[Oracle] regexp_substr로 날짜 추출하기

뜽배 2024. 3. 15. 10:30
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
반응형