안녕하세요...REGEXP_SUBSTR 사용시 구분자로 구분한 값이 공백인 경우에는 매칭순번??이 제대로 안되는것 같은데요..
WITH TMP AS ( SELECT '120,,,,,,002' TXT FROM DUAL UNION ALL SELECT '120,A,,C,,,002' TXT FROM DUAL UNION ALL SELECT '120,A,B,C,D,E,002' TXT FROM DUAL ) SELECT REGEXP_SUBSTR(TXT, '[^,]+', 1, 1) LVL1 , REGEXP_SUBSTR(TXT, '[^,]+', 1, 2) LVL2 , REGEXP_SUBSTR(TXT, '[^,]+', 1, 3) LVL3 , REGEXP_SUBSTR(TXT, '[^,]+', 1, 4) LVL4 , REGEXP_SUBSTR(TXT, '[^,]+', 1, 5) LVL5 , REGEXP_SUBSTR(TXT, '[^,]+', 1, 6) LVL6 , REGEXP_SUBSTR(TXT, '[^,]+', 1, 7) LVL7 FROM TMP; 다음의 결과가 이렇게 나오는 데요..
LVL1 | LVL2 | LVL3 | LVL4 | LVL5 | LVL6 | LVL7 |
120 | 002 | |||||
120 | A | C | 002 | |||
120 | A | B | C | D | E | 002 |
실제 원하는 결과는 다음과 같습니다.
LVL1 | LVL2 | LVL3 | LVL4 | LVL5 | LVL6 | LVL7 |
120 | 002 | |||||
120 | A | C | 002 | |||
120 | A | B | C | D | E | 002 |
구분자로 구분시 값이 공백이어도 매칭순번은 구분자의 순서데로 가져오게 할 수 있을까요??
gpt가 알려준 자답입니다...
(.*?)(,|$)는 비탐욕적(non-greedy) 매칭을 사용하여 각 레벨의 값을 추출합니다. WITH TMP AS ( SELECT '120,,,,,,002' TXT FROM DUAL UNION ALL SELECT '120,A,,C,,,002' TXT FROM DUAL UNION ALL SELECT '120,A,B,C,D,E,002' TXT FROM DUAL ) SELECT REGEXP_SUBSTR(TXT, '(.*?)(,|$)', 1, 1, NULL, 1) LVL1, REGEXP_SUBSTR(TXT, '(.*?)(,|$)', 1, 2, NULL, 1) LVL2, REGEXP_SUBSTR(TXT, '(.*?)(,|$)', 1, 3, NULL, 1) LVL3, REGEXP_SUBSTR(TXT, '(.*?)(,|$)', 1, 4, NULL, 1) LVL4, REGEXP_SUBSTR(TXT, '(.*?)(,|$)', 1, 5, NULL, 1) LVL5, REGEXP_SUBSTR(TXT, '(.*?)(,|$)', 1, 6, NULL, 1) LVL6, REGEXP_SUBSTR(TXT, '(.*?)(,|$)', 1, 7, NULL, 1) LVL7 FROM TMP;
'(.*?)(,|$)' 이게 어떻게 한다는 의미인지는 모르겠는데..원하는 결과는 나오네요..ㅠㅠ