SELECT REGEXP_SUBSTR(COL,'[^^]+',1,1) A , REGEXP_SUBSTR(COL,'[^^]+',1,2) B , REGEXP_SUBSTR(COL,'[^^]+',1,3) C , REGEXP_SUBSTR(COL,'[^^]+',1,4) D FROM (SELECT '123^456^^789' AS COL FROM DUAL) ;
안녕하세요. REGEXP_SUBSTR 함수를 사용하고 있습니다.
123 | 456 | 789 | NULL -> 구분자 사이에 값이 없을 경우 결과가 이렇게 나오는데요.
123 | 456 | NULL | 789 -> 이렇게 나오게 하고 싶습니다.
REGEXP_SUBSTR 함수를 사용해서 원하는 결과를 얻을 수 있는 방법이 있을까요?
기호별로 정리하면
( ) -> 문자열 그룹으로 묶기
[^문자] ->문자열에서 대괄호 안에 있는 문자는 포함시키지 않음
* -> 0번 혹은 1번 이상
$ -> 문자열의 마지막
| -> or
\ -> 정규식에서 사용하는 문자를 문자 그대로 읽게 해줌.
ex)대괄호와 사용되지 않은 ^는 문자열 시작을 의미하므로 \를 붙여 \^라고 하면 문자 ^를 의미
그룹별로 정리해보면
[^^]* -> ^가 아닌 글자가 0회 혹은 1번 이상 반복
$|\^ -> 문자열의 마지막 이거나 ^ 문자
전체적으로 풀면 '^가 아닌 글자가 0회이상 반복되다가 문자열이 끝나거나 ^를 만나는 패턴을 찾아라'
6번째는 '괄호로 묶은 그룹 중 n번째 것을 보여달라' 여기서는 괄호가 2개이고 1번째 것이니까 [^^]* 부분