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

[Oracle] regexp_substr로 특정 문자 기준으로 문자열 자르기

뜽배 2024. 3. 15. 10:43
728x90
반응형

oracle에서 SUBSTR을 사용하여 문자열을 자르는 경우도 있지만

 

특정 문자열을 기준으로 분리하여 조회하는 경우도 있다. 예를들어 전화번호의 값이 010-XXXX-XXXX의 형식으로 저장되어 있을 때 중간4개의 번호만 조회하는 경우가 있을 수 있다.

 

REGEXP_SUBSTR을 사용하여 특정문자를 구분자로 두고 문자열을 자를 수 있다.

 

사용법은 REGEXP_SUBSTR('컬럼 또는 값' , '[^ (구분자) ]+', 구분자를 찾을 위치, 구분자를 찾은 순서) 의 포멧이다.

 

간단하게 DBA_DATA_FILES 로 예시를 들어보면 

SELECT 
	file_name,
	regexp_substr(file_name, '[^\]+', 1, 1) STR1,
	regexp_substr(file_name, '[^\]+', 1, 2) STR2,
	regexp_substr(file_name, '[^\]+', 1, 3) STR3,
	regexp_substr(file_name, '[^\]+', 2, 1) STR4,
	regexp_substr(file_name, '[^\]+', 2, 2) STR5
FROM dba_data_files;

위처럼 SQL을 작성 할 수 있다.

 

 

 

결과는 이렇게 나온다. 

 

REGEXP_SUBSTR(FILE_NAME, '[^\]+', 2, 2)  <- 이 구문으로 예시를 들자면

 

\ <- 구분문자

2 <- file_name에서의 시작위치 (C:\APP....  이런식의 문자열로 시작되는데 :\APP... 여기서 부터 검색한다고 보면된다)

2 <- 2번째 블록 ( :\APP\ORADATA   여기서 ':' 는 첫번째 찾은 문자열이고 'APP' 이게 두번째 찾은 문자열이다, 'ORADATA'는 3번째 찾은 문자열이 될것이다)

 

 

728x90
반응형