[Oracle] REGEXP_SUBSTR : 오라클 함수 / 정규식 형태의 구분자를 이용 하여 자르기 / 열(ROW)로 가져오기
1. 정의
문자열에서 정규표현식 패턴을 구분자로 검색하여 원하는 패턴으로 변경해서 리턴한다.
2. 함수 파라미터 설명

[source_char]
검색 값으로 사용되는 문자, 일반적으로 문자열 이다.
내가 자르고 싶은 문자열을 배치해주면 된다.
ex ) 010♥1234♥5678
[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