[ORACLE] REGEXP_SUBSTR 을 이용하여 split 처럼 구분자로 자르기 [오라클]

REGEXP_SUBSTR split

REGEXP_SUBSTR 을 활용하여 SPLIT 효과를 내봅시다.

REGEXP_SUBSTR 함수호출 매개변수는
1. SOURCE STRING : 대상문자
2. PATTERN : 식 '[^,]+' 은 ,(대괄호 안의 쉼표 문자) 문자가 아닌(대괄호 안의 ^기호) 하나이상(+기호)의 어떤 값을 의미합니다.
3. POSITION : 시작위치
4. OCCURENCE : 몇 번째 발생인지?
4개를 사용하였습니다.

WITH TABLENAME
AS
(
SELECT ' alpha = 5  ,red=     110,   green=5  , blue   =255' COLUMNNAME FROM DUAL
)
SELECT
TRIM(REGEXP_SUBSTR(REGEXP_SUBSTR(COLUMNNAME, '[^,]+', 1, 1), '[^=]+', 1, 1)) C1,
TRIM(REGEXP_SUBSTR(REGEXP_SUBSTR(COLUMNNAME, '[^,]+', 1, 1), '[^=]+', 1, 2)) C2,
TRIM(REGEXP_SUBSTR(REGEXP_SUBSTR(COLUMNNAME, '[^,]+', 1, 2), '[^=]+', 1, 1)) C3,
TRIM(REGEXP_SUBSTR(REGEXP_SUBSTR(COLUMNNAME, '[^,]+', 1, 2), '[^=]+', 1, 2)) C4,
TRIM(REGEXP_SUBSTR(REGEXP_SUBSTR(COLUMNNAME, '[^,]+', 1, 3), '[^=]+', 1, 1)) C5,
TRIM(REGEXP_SUBSTR(REGEXP_SUBSTR(COLUMNNAME, '[^,]+', 1, 3), '[^=]+', 1, 2)) C6,
TRIM(REGEXP_SUBSTR(REGEXP_SUBSTR(COLUMNNAME, '[^,]+', 1, 4), '[^=]+', 1, 1)) C7,
TRIM(REGEXP_SUBSTR(REGEXP_SUBSTR(COLUMNNAME, '[^,]+', 1, 4), '[^=]+', 1, 2)) C8
 FROM TABLENAME

Oracle Split

오라클 스플릿과 REGEXP_SUBSTR 함수 호출 매개변수(oracle 11g)에 대해 추가적으로 알아보는 시간입니다!

Oracle Split(regexp_substr)

오라클은 SPLIT 함수를 명시적으로 제공하지는 않습니다.

그리하여 REGEXP_SUBSTR 함수를 사용해 비슷한 효과를 내보겠습니다.

WITH TAB AS (SELECT 'ANALYST,CLERK,MANAGER,PRESIDENT,SALESMAN' COL FROM DUAL)
SELECT REGEXP_SUBSTR (COL, '[^,]+', 1, 1) COL1,
       REGEXP_SUBSTR (COL, '[^,]+', 1, 2) COL2,
       REGEXP_SUBSTR (COL, '[^,]+', 1, 3) COL3,
       REGEXP_SUBSTR (COL, '[^,]+', 1, 4) COL4,
       REGEXP_SUBSTR (COL, '[^,]+', 1, 5) COL5       
  FROM TAB;

REGEXP_SUBSTR 함수 호출 매개변수(oracle 11g)

  • source_char : 대상 문자
    => 'ANALYST,CLERK,MANAGER,PRESIDENT,SALESMAN'
  • pattern : 표현식(Regular Expression)
    => '[^,]+'
    => '[^,]+' 은 쉼표(,)가 아닌(^) 하나 이상(+)의 어떤 값을 의미합니다.
  • position : 대상 문자에서 검색을 시작할 위치(기본값 1)
    => 1
  • occurrence : 표현식의 몇 번째 발생을 목표로 하는지 선택(기본값 1)
    => 1이면 첫 번째, 2면 두 번째 구분 값을 가져옵니다.

(참고) 5번, 6번 매개변수는 사용하지 않았습니다. 해당 부분은 이러한 매개변수 값도 있구나 하고 넘어가시면 됩니다.
5. match_parameter : 표현식 매개변수입니다. 예를 들면 'i'를 입력하면 대소문자를 구분하지 않는(case-insensitive) 매칭을 진행합니다.
6. subexpression : 기본값 0입니다. 0~9를 입력하실 수 있으며 매칭 표현에서 해당 순서에 해당하는 값을 반환합니다. (좌측 소괄호 매칭 기준)

Subexpression Parameter

SELECT 
        REGEXP_SUBSTR ('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 0) SUBEXPR0,
        REGEXP_SUBSTR ('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 1) SUBEXPR1,
        REGEXP_SUBSTR ('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 2) SUBEXPR2,
        REGEXP_SUBSTR ('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 3) SUBEXPR3,
        REGEXP_SUBSTR ('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 4) SUBEXPR4,
        REGEXP_SUBSTR ('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 5) SUBEXPR5,
        REGEXP_SUBSTR ('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 6) SUBEXPR6,
        REGEXP_SUBSTR ('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 7) SUBEXPR7,
        REGEXP_SUBSTR ('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 8) SUBEXPR8,
        REGEXP_SUBSTR ('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 9) SUBEXPR9
  FROM DUAL;

좌 괄호 순서대로 (123) (45678) (56) (78) 이 보이시죠?

댓글