카테고리 없음

[Oracle] REGEXP_SUBSTR : 오라클 함수 / 정규식 형태의 구분자를 이용 하여 자르기 / 열(ROW)로 가져오기

DEV_SE 2021. 7. 23. 16:35

1. 정의

문자열에서 정규표현식 패턴을 구분자로 검색하여 원하는 패턴으로 변경해서 리턴한다.

 

 

2. 함수 파라미터 설명

 

[source_char]

검색 값으로 사용되는 문자, 일반적으로 문자열 이다.

내가 자르고 싶은 문자열을 배치해주면 된다.

ex ) 01012345678

 

[pattern]

지정하고 싶은 구분자를 '정규식 형태' 로 배치해준다. 일반적으로 텍스트 문자이다.

ex  ) ^♥]+ 이 정규식 표현은 이 아닌 문자열을 뜻합니다.

 

[position]

검색을 시작해야 하는 위치 / 양의정수

기본값은 1 : 첫 번째 문자에서 검색을 시작하겠다는 의미

 

[occurrence] 

source_char 에서 검색해야 하는 항목을 나타내는 / 양의 정수

기본값은 1 : pattern의 첫 번째 항목을 검색함을 의미

 

[match_param]

함수의 기본 일치 동작 변경 가능 , 대소문자를 구분할지 말지 , 공백을 무시할지 등으로 

생략 가능

 

 

 

[예제]

예제) C-01-02 문자 나누기 : 구분자 - 를 기준으로 문자를 나눈다.

구문
REGEXP_SUBSTR(대상 문자, 패턴, 시작 위치(최소값1),매칭순번)

REGEXP_SUBSTR('C-01-02','[^-]+',1,1)
 결과 = C

REGEXP_SUBSTR('C-01-02','[^-]+',1,2)
 결과 = 01

REGEXP_SUBSTR('C-01-02','[^-]+',1,3)
 결과 = 03

대괄호 [] 안의 ^ 는  NOT의 의미를 나타냄
^ 문자가 대괄호 밖에서 사용되면 문자열의 시작을 의미함
+ 는 문자패턴이 1개이상 연결될 때를 나타냄, 위 예제에서 01,03등 2개이상 나타내기 위함
+ 시작위치 & 매칭 순번

 

 

테스트 가능 쿼리

SELECT REGEXP_SUBSTR(A.DISABLED_TYPE,'[^, ]+', 1, ROWNUM) as DISABLED_TYPE
  FROM (
		SELECT '11, 12, 13, 14' AS DISABLED_TYPE
 		FROM DUAL
        ) A 
CONNECT BY ROWNUM <= LENGTH(REGEXP_REPLACE(DISABLED_TYPE,'[^,]+')) +1

=> 11, 12, 13, 14 형태의 (단일컬럼, 단일행) 데이터를 REGEXP_SUBSTR을 사용하여 쉼표(,) 를 구분자로 잘라서 가져온다. LENGTH(REGEXP_REPLACE(DISABLED_TYPE,'[^,]+')) +1 로 길이를 구하여 CONNECT BY로 반복해서 그려줌

 

[완성]

11

12

13

14

형태의 ROW로 잘라서 그릴 수 있는 쿼리

 

 

 

[오라클] split to row 구현

오라클에서 문자열을 split 한 후 그 결과를 로우로 리턴 받고 싶은 경우가 있을 수 있습니다. 예를 들어  123▨9214▨432▨567▨8867 와 같은 문자열을  123  9214  432  567  8867 와 같은 형태로 변경해.

amnesis.tistory.com

 

반응형