[Oracle] 오라클 문자열 구분자 자르기 (정규식)

오라클에서 문자열의 특정 구분자를 기준으로 자르기 위해서는 SUBSTR, INSTR 함수를 사용한다. 그러나 오라클 10g부터 REGEXP_SUBSTR 정규식 함수를 사용하면 간편하게 문자열을 구분자로 자를 수 있다.

 

예제 1 - SUBSTR, INSTR 함수 사용

WITH tab AS (
    SELECT '123,456' AS str FROM dual
)

SELECT a.str
     , SUBSTR(a.str, 1, INSTR(a.str, ',') - 1) AS str1
     , SUBSTR(a.str, INSTR(a.str, ',') + 1)    AS str2
  FROM tab a

 

 

SUBSTR([문자열], [자를시작위치], INSTR([문자열], [구분자]))

문자열 '123,456'의 구분자 쉼표(',')를 기준으로 문자열을 자르는 예제이다. 

 

예제 2 - REGEXP_SUBSTR 정규식 함수 사용

WITH tab AS (
    SELECT '123,456' AS str FROM dual
)

SELECT a.str
     , REGEXP_SUBSTR(a.str,'[^,]+', 1, 1) AS str1
     , REGEXP_SUBSTR(a.str,'[^,]+', 1, 2) AS str2
  FROM tab a

 

 

REGEXP_SUBSTR([문자열], [구분자(패턴)], [구분자찾을시작위치], [구분자찾은순서])

정규식 함수를 사용하여 구분자 쉼표(',')를 기준으로 문자열을 자르는 예제이다.

 

응용 예제

WITH tab AS (
    SELECT 'Java,Kotlin,Python,Swift' AS lang FROM dual
)

SELECT a.lang
     , SUBSTR(a.lang, 1, INSTR(a.lang, ',') - 1) AS str1
     , SUBSTR(a.lang, INSTR(a.lang, ',', 1, 1) + 1, INSTR(a.lang, ',', 1, 2) - INSTR(a.lang, ',', 1, 1) - 1) AS str2
     , SUBSTR(a.lang, INSTR(a.lang, ',', 1, 2) + 1, INSTR(a.lang, ',', 1, 3) - INSTR(a.lang, ',', 1, 2) - 1) AS str3
     , SUBSTR(a.lang, INSTR(a.lang, ',', 1, 3) + 1) AS str14
  FROM tab a

 

 

문자열 'Java,Kotlin,Python,Swift'의 구분자 쉼표를 기준으로 자르는 예제이다.

SUBSTR, INSTR 함수를 사용하여 구분자가 2개 이상이 포함된 문자열을 자를 때는 쿼리문이 조금 복잡해진다.

 

WITH tab AS (
    SELECT 'Java,Kotlin,Python,Swift' AS lang FROM dual
)

SELECT a.lang
     , REGEXP_SUBSTR(a.lang,'[^,]+', 1, 1) AS str1
     , REGEXP_SUBSTR(a.lang,'[^,]+', 1, 2) AS str2
     , REGEXP_SUBSTR(a.lang,'[^,]+', 1, 3) AS str3
     , REGEXP_SUBSTR(a.lang,'[^,]+', 1, 4) AS str4
  FROM tab a

 

 

오라클 10g 이상을 사용할 경우 REGEXP_SUBSTR 함수를 사용하여 문자열의 구분자를 자르면 쿼리문이 깔끔해진다.

 

 

문자열의 구분자를 잘라서 행(ROW)으로 만드는 방법은 아래를 참고하면 된다.

 

[Oracle] 문자열 구분자를 행으로 분리 (Split)

오라클 쿼리에서 칼럼에 구분자로 입력된 값을 행으로 분리(Split)하여 조회해야 할 상황이 종종 발생한다. 대부분 값을 조회하여 프로그래밍 코드에서 구분자를 분리하는 작업을 한다. 그러나

gent.tistory.com

 

댓글

Designed by JB FACTORY