구분자 위치값 질문 0 8 1,582

by 다니엘윤 [SQL Query] [2019.09.06 13:29:17]


 -- regexp_substr 를 이용하여 | 구분자의 각 위치값 구하기 WITH t AS ( SELECT '|12|N36' GB FROM dual ) SELECT regexp_substr(GB,'[^|]+',1,1) AS gb1 -- 구분자의 첫번째값 , regexp_substr(GB,'[^|]+',1,2) AS gb2 -- 구분자의 두번째값 , regexp_substr(GB,'[^|]+',1,3) AS gb3 -- 구분자의 세번째값 FROM t ;

원하는결과처럼 나오게하려면 쿼리수정 어떻게해할까요?

즉.구분자(|)의 위치값이 널이여도 위치값이 나오게(널).

 

-- 현재결과

--------------------

gb1 gb2 gb3

--------------------

12 N36 null

 

-- 원하는결과

--------------------

gb1 gb2 gb3

--------------------

null 12 N36      

by jkson [2019.09.06 13:41:56]
 WITH T AS (SELECT '|12|N36' GB FROM DUAL)
 SELECT REGEXP_SUBSTR(GB, '([^|]*)($|\|)', 1, 1, 'i', 1) AS GB1 -- 구분자의 첫번째값
       ,REGEXP_SUBSTR(GB, '([^|]*)($|\|)', 1, 2, 'i', 1) AS GB2 -- 구분자의 두번째값 
       ,REGEXP_SUBSTR(GB, '([^|]*)($|\|)', 1, 3, 'i', 1) AS GB3 -- 구분자의 세번째값 
   FROM T;

 


by 다니엘윤 [2019.09.06 14:23:04]

굿.잘되네요.^^


by 우리집아찌 [2019.09.06 16:39:48]

오오! 


by jkson [2019.09.06 17:13:40]

저도 질문자님처럼 정규식 썼다가 구분자 사이에 값이 없어서 프로그램 오류 났던 적이 있어서ㅋㅋ null값이 올 수 있는 경우 위와 같이 만들었는데 더 쉬운 방법도 있을 거 같아요.


by 우리집아찌 [2019.09.06 17:21:24]

난 그냥 LTRIM(  REGEXP_SUBSTR( ' ' || gb  .....)   이런식으로 썼었는데 ㅋㅋ


by jkson [2019.09.06 17:42:03]

문자열에 구분자 append하고 정규식 쓰면 더 간단하겠네요. 걷는중이라.. 테스트는 담에ㅋ


by jkson [2019.09.09 16:27:40]

생각처럼은 안 되네요.

WITH T AS (SELECT '|12|N36' GB FROM DUAL)
SELECT TRIM(BOTH '^' FROM REGEXP_SUBSTR(REPLACE(GB,'|','^|^'),'[^|]+',1,1)) AS GB1
     , TRIM(BOTH '^' FROM REGEXP_SUBSTR(REPLACE(GB,'|','^|^'),'[^|]+',1,2)) AS GB2
     , TRIM(BOTH '^' FROM REGEXP_SUBSTR(REPLACE(GB,'|','^|^'),'[^|]+',1,3)) AS GB3
  FROM T;

 


by 마농 [2019.09.09 09:46:23]
SELECT SUBSTR(gb, 1, INSTR(gb, '|', 1, 1) - 1) gb1
     , SUBSTR(gb, INSTR(gb, '|', 1, 1) + 1, INSTR(gb, '|', 1, 2) - INSTR(gb, '|', 1, 1) - 1) gb2
     , SUBSTR(gb, INSTR(gb, '|', 1, 2) + 1, 99) gb3
  FROM t
;

 

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