REGEXP_SUBSTR 질문 0 8 1,515

by 김철수 [SQL Query] [2017.01.25 11:08:55]


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 함수를 사용해서 원하는 결과를 얻을 수 있는 방법이 있을까요?

by 랑에1 [2017.01.25 11:25:30]
SELECT TRIM(REGEXP_SUBSTR(COL,'[^^]+',1,1)) A
     , TRIM(REGEXP_SUBSTR(COL,'[^^]+',1,2)) B
     , TRIM(REGEXP_SUBSTR(COL,'[^^]+',1,3)) C
     , TRIM(REGEXP_SUBSTR(COL,'[^^]+',1,4)) D
  FROM (SELECT REPLACE('123^456^^789', '^', '^ ') AS COL
          FROM DUAL)

이런건 안될까요? ㅎㅎ

 


by jkson [2017.01.25 12:16:27]
--일단은..
SELECT REGEXP_SUBSTR(COL,'([^^]*)($|\^)',1,1,'i',1) A
     , REGEXP_SUBSTR(COL,'([^^]*)($|\^)',1,2,'i',1) B
     , REGEXP_SUBSTR(COL,'([^^]*)($|\^)',1,3,'i',1) C
     , REGEXP_SUBSTR(COL,'([^^]*)($|\^)',1,4,'i',1) D
  FROM (SELECT '123^456^^789' AS COL
          FROM DUAL)

맞는지는 좀더 검토를..


by 김철수 [2017.01.25 13:13:03]

네 착각해서 좀전에 지웠네요;;

지우기 전에 보셔버려서.. 민망하네요;


by jkson [2017.01.25 13:10:02]

원하시는 결과 안 나오는데요..

'i'의 의미는 대소문자 구분하지 말라는 것입니다.

null로 그 자리를 채우셔도 되구요.

6번째 parameter 쓰려고 5번째 자리는 기능상 상관이 없을 것 같아

null 대신 그냥 'i' 넣은 거구요.

댓글 지우셨네요.


by 김철수 [2017.01.25 13:29:25]

두분 답변 감사합니다.

jkson님 '([^^]*)($|\^)' 이건 어떤 의미인지 궁금합니다. 6번째 인자도요. 어렵네요..


by jkson [2017.01.25 13:35:34]

기호별로 정리하면

( ) -> 문자열 그룹으로 묶기

[^문자] ->문자열에서 대괄호 안에 있는 문자는 포함시키지 않음

* -> 0번 혹은 1번 이상

$ -> 문자열의 마지막

| -> or

\ -> 정규식에서 사용하는 문자를 문자 그대로 읽게 해줌.

ex)대괄호와 사용되지 않은 ^는 문자열 시작을 의미하므로 \를 붙여 \^라고 하면 문자 ^를 의미

 

그룹별로 정리해보면

[^^]* -> ^가 아닌 글자가 0회 혹은 1번 이상 반복

$|\^ -> 문자열의 마지막 이거나 ^ 문자

 

전체적으로 풀면 '^가 아닌 글자가 0회이상 반복되다가 문자열이 끝나거나 ^를 만나는 패턴을 찾아라'

6번째는 '괄호로 묶은 그룹 중 n번째 것을 보여달라' 여기서는 괄호가 2개이고 1번째 것이니까 [^^]* 부분


by 김철수 [2017.01.25 13:57:26]

어렵네요.. 감사합니다^^


by jkson [2017.01.25 13:58:29]

정규식 공부해보시면 어렵지 않을 겁니다. 저도 초짜예요ㅎㅎ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입