정규식 문의드립니다. 0 9 1,321

by swlee [SQL Query] [2018.10.30 15:27:22]


아래와 같은 문자열들이 있을 때 대문자와 숫자로 조합된 문자만 나오게 정규식을 짜고 싶은데 잘 안되네요

고수님들의 도움 부탁 드립니다.

 

WITH T AS (SELECT '[폴햄키즈]POLHAMKIDS 오리털롱패딩점퍼 PKX4JP1040[패션플러스]' TXT FROM DUAL UNION ALL
SELECT '[커클랜드] KIRKLAND 콜롬비안 원두커피 Dark Roast-Fine Grind1.36kg' TXT FROM DUAL UNION ALL
SELECT '80NPNALP001BAN_네파성인레터슬리퍼_녹색280' TXT FROM DUAL)
SELECT *
FROM T;

by 마농 [2018.10.30 15:49:57]

원하시는 결과표를 보여주세요.


by swlee [2018.10.30 15:53:01]

안녕하세요 마농님,

아래와 같이 추출되었으면 합니다.

TXT
PKX4JP1040
 
80NPNALP001BAN

 

 


by 신이만든지기 [2018.10.30 16:55:33]
WITH
    T AS
        (SELECT '[폴햄키즈]POLHAMKIDS 오리털롱패딩점퍼 PKX4JP1040[패션플러스]' TXT
           FROM DUAL
         UNION ALL
         SELECT '[커클랜드] KIRKLAND 콜롬비안 원두커피 Dark Roast-Fine Grind1.36kg' TXT
           FROM DUAL
         UNION ALL
         SELECT '80NPNALP001BAN_네파성인레터슬리퍼_녹색280' TXT FROM DUAL)
SELECT TXT
    , REGEXP_SUBSTR(TXT, '(([A-Z]+[0-9]+)+|([0-9]+[A-Z]+)+)', 1) RESULT
  FROM T;

 


by 마농 [2018.10.30 16:31:31]
WITH t AS
(
SELECT 1 no, '[폴햄키즈]POLHAMKIDS 오리털롱패딩점퍼 PKX4JP1040[패션플러스]' txt FROM dual
UNION ALL SELECT 2, '[커클랜드] KIRKLAND 콜롬비안 원두커피 Dark Roast-Fine Grind1.36kg' FROM dual
UNION ALL SELECT 3, '80NPNALP001BAN_네파성인레터슬리퍼_녹색280' FROM dual
UNION ALL SELECT 4, '80NPNALP001BAN_네파성인레터슬리퍼_GREEN280' FROM dual
)
SELECT no, txt, lv, v
  FROM (-- 단어 단위로 분리 --
        SELECT no, txt
             , lv
             , REGEXP_SUBSTR(txt, '[[:alnum:]]+', 1, lv) v
          FROM t
             , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 99)
         WHERE lv <= REGEXP_COUNT(txt, '[[:alnum:]]+')
        )
 WHERE REGEXP_LIKE(v, '^[A-Z0-9]+$') -- 대문자 숫자 조합(단, 대문자만, 소문자만도 가능하므로 아래 조건 추가)
   AND REGEXP_LIKE(v, '[A-Z]')       -- 대문자 포함
   AND REGEXP_LIKE(v, '[1-9]')       -- 숫자 포함
 ORDER BY no, lv
;

 


by swlee [2018.10.30 16:43:59]

감사합니다.


by 신이만든지기 [2018.10.30 16:56:07]

엇, 한발 늦었네요.


by 마농 [2018.10.31 08:06:12]

(영문+숫자) 또는 (숫자+영문) 처럼 짝을 이루는 단어만 되네요.
(영문+숫자+영문) (숫자+영문+숫자) 처럼 짝이 안맞는건 안되네요.


by 신이만든지기 [2018.10.31 10:52:11]
WITH
    T AS
        (SELECT '[폴햄키즈]POLHAMKIDS 오리털롱패딩점퍼 PKX4JP1040[패션플러스]' TXT
           FROM DUAL
         UNION ALL
         SELECT '[커클랜드] KIRKLAND 콜롬비안 원두커피 Dark Roast-Fine Grind1.36kg' TXT
           FROM DUAL
         UNION ALL
         SELECT '9P80NPNALP001BANA_네파성인레터슬리퍼_녹색280' TXT FROM DUAL)
SELECT TXT
    , REGEXP_SUBSTR(TXT, '([A-Z]+[0-9]+[0-9A-Z]*|[0-9]+[A-Z]+[0-9A-Z]*)+', 1) RESULT
  FROM T;

오오~ 마농님 말씀듣고 다시 수정했습니다.


by 마농 [2018.10.31 11:35:50]

good idea!

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