다른 시스템에서 온 배치 정보중 필요한 텍스트만 뽑아내기 0 3 861

by MS [SQL Query] [2019.08.04 21:51:32]


위쪽 부분이 입력값 입니다. 하지만 저는 이중에서 { }안에 있는 정보 그리고 AND, OR, NOT, (, )의 정보만

가져오고 싶습니다. 가져오고 싶은 결과물은 아래 부분입니다.

읽어주셔서 감사합니다. 

F6011: AAA-F6011-BOM{AAA83}
F6011: AAA-F6011-BOM{AAA78} AND JAG-TAP131T-BOM{JAG10} AND JAA-F6011-BOM{JAA47}
F6011: FAC-TAP131T-BOM{FAC30} AND KAJ-TAP131T-BOM{KAJ10} AND VAM-TAP131T-BOM{VAM00} AND CAD-TAP131T-BOM{CAD10} AND EAC-F6011-BOM{EAC00}
F6011: AAA-F6011-BOM{AAA80} OR AAA-F6011-BOM{AAA78} AND AAE-F6011-BOM{AAE16} AND EAA-F6011-BOM{EAA31} OR EAA-F6011T-BOM{EAA32} AND EAE-F6021-BOM{EAE40}
F6011: SAG-TAP131T-BOM{SAG20} AND SAK-TAP131T-BOM{SAK10}
F6011:  NOT (SAG-TAP131T-BOM{SAG20}) AND SAK-TAP131T-BOM{SAK00}

AAA83
AAA78 AND JAG10 AND JAA47
FAC30 AND KAJ10 AND VAM00 AND CAD10 AND EAC00
AAA80 OR AAA78 AND AAE16 AND EAA31 OR EAA32 AND EAE40
SAG20 AND SAK10
NOT (SAG20) AND SAK00

by 생각 [2019.08.05 11:15:56]
WITH T1(NM) AS
(
SELECT 'F6011: AAA-F6011-BOM{AAA83}' FROM DUAL UNION ALL
SELECT 'F6011: AAA-F6011-BOM{AAA78} AND JAG-TAP131T-BOM{JAG10} AND JAA-F6011-BOM{JAA47}' FROM DUAL UNION ALL
SELECT 'F6011: FAC-TAP131T-BOM{FAC30} AND KAJ-TAP131T-BOM{KAJ10} AND VAM-TAP131T-BOM{VAM00} AND CAD-TAP131T-BOM{CAD10} AND EAC-F6011-BOM{EAC00}' FROM DUAL UNION ALL
SELECT 'F6011: AAA-F6011-BOM{AAA80} OR AAA-F6011-BOM{AAA78} AND AAE-F6011-BOM{AAE16} AND EAA-F6011-BOM{EAA31} OR EAA-F6011T-BOM{EAA32} AND EAE-F6021-BOM{EAE40}' FROM DUAL UNION ALL
SELECT 'F6011: SAG-TAP131T-BOM{SAG20} AND SAK-TAP131T-BOM{SAK10}' FROM DUAL UNION ALL
SELECT 'F6011: NOT (SAG-TAP131T-BOM{SAG20}) AND SAK-TAP131T-BOM{SAK00}' FROM DUAL
)
SELECT REGEXP_SUBSTR(NM,'NOT|{[^}]*|OR|AND',1,RN.NO) NM,
       RN.NO NO
  FROM T1,(SELECT ROWNUM NO FROM DUAL CONNECT BY LEVEL <=12) RN
 WHERE RN.NO <= 12

-- 여기서 조금만 수정하심 될 거 같아요.

 


by jkson [2019.08.05 12:39:19]
WITH T AS
(
SELECT 'F6011: AAA-F6011-BOM{AAA83}' TXT FROM DUAL UNION ALL
SELECT 'F6011: AAA-F6011-BOM{AAA78} AND JAG-TAP131T-BOM{JAG10} AND JAA-F6011-BOM{JAA47}' TXT FROM DUAL UNION ALL
SELECT 'F6011: FAC-TAP131T-BOM{FAC30} AND KAJ-TAP131T-BOM{KAJ10} AND VAM-TAP131T-BOM{VAM00} AND CAD-TAP131T-BOM{CAD10} AND EAC-F6011-BOM{EAC00}' FROM DUAL UNION ALL
SELECT 'F6011: AAA-F6011-BOM{AAA80} OR AAA-F6011-BOM{AAA78} AND AAE-F6011-BOM{AAE16} AND EAA-F6011-BOM{EAA31} OR EAA-F6011T-BOM{EAA32} AND EAE-F6021-BOM{EAE40}' FROM DUAL UNION ALL
SELECT 'F6011: SAG-TAP131T-BOM{SAG20} AND SAK-TAP131T-BOM{SAK10}' FROM DUAL UNION ALL
SELECT 'F6011:  NOT (SAG-TAP131T-BOM{SAG20}) AND SAK-TAP131T-BOM{SAK00}' FROM DUAL
)
SELECT LISTAGG(SUBTXT,' ') WITHIN GROUP(ORDER BY LV) TXT
  FROM
  (
  SELECT TXT, REGEXP_SUBSTR(TXT,'{[^}]*}|AND|OR|NOT|\(|\)',1,LV) SUBTXT, LV
    FROM T
      , (SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL < 20)
   WHERE REGEXP_COUNT(TXT,'{[^}]*}|AND|OR|NOT|\(|\)') >= LV
  )
 GROUP BY TXT

 


by 마농 [2019.08.09 16:31:53]
SELECT txt
     , REPLACE(REGEXP_REPLACE(txt, '^.+: |[^( ]+-BOM{'), '}') x
  FROM t
;

 

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