[Oracle] 오라클 문자열 구분자 자르기 (정규식)
- 데이터베이스/오라클
- 2022. 1. 1.
오라클에서 문자열의 특정 구분자를 기준으로 자르기 위해서는 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)으로 만드는 방법은 아래를 참고하면 된다.