string—如何从oraclesql中的列获取所有模式

vzgqcmou  于 2021-08-01  发布在  Java
关注(0)|答案(2)|浏览(369)

以下是列中的文本:
p348955:拆除nha p210面板pn:6703elm21,并拆除子组件pn:elm2000-10-10(项目70)数量2ea和pn:elm200-11-10或alt(项目75)数量1ea和pn elm1057-1数量1ea,由mmeechan参考id 7369要求
我希望从该文本中提取所有类似的模式,模式定义如下:
查找任何以“pn”或“pn:”或“pn”开头的内容
提取上面模式后面的字母数字字符,我希望从上面显示的文本中提取以下内容
'pn:6703elm21'、'pn:elm2000-10-10'、'pn:elm200-11-10'、'pn elm1057-1'
我尝试了以下方法:

  1. SELECT REGEXP_SUBSTR( 'P348955: REMOVE NHA P210 PANEL PN : 6703ELM21 &
  2. REMOVE SUB ASSY PN: ELM2000-10-10 (ITEM 70) QTY 2EA & PN: ELM200-11-10
  3. OR ALT (ITEM 75) QTY 1EA & PN ELM1057-1 QTY 1EA REQUESTED BY MMEECHAN
  4. REF ID 7369', '(PN+/s*+:?+/s*+[A-Z][0-9])' FROM DUAL;

所需输出为pn:6703elm21、pn:elm2000-10-10、pn:elm200-11-10、pn elm1057-1
不知道如何得到这个输出

jljoyd4f

jljoyd4f1#

这将使您的输出以每次出现一行的形式显示:

  1. WITH test_data (str, pattern) AS
  2. (
  3. SELECT 'P348955: REMOVE NHA P210 PANEL PN : 6703ELM21 &
  4. REMOVE SUB ASSY PN: ELM2000-10-10 (ITEM 70) QTY 2EA & PN: ELM200-11-10
  5. OR ALT (ITEM 75) QTY 1EA & PN ELM1057-1 QTY 1EA REQUESTED BY MMEECHAN
  6. REF ID 7369'
  7. ,'PN\s*:?\s*(\w|-)*'
  8. FROM DUAL
  9. )
  10. SELECT regexp_substr(str,pattern,1,level,'im' ) FROM test_data
  11. CONNECT BY regexp_substr(str,pattern,1,level,'im' ) IS NOT NULL;
  12. PN : 6703ELM21
  13. PN: ELM2000-10-10
  14. PN: ELM200-11-10
  15. PN ELM1057-1
展开查看全部
bq8i3lrv

bq8i3lrv2#

另一种选择:

  1. SELECT substr
  2. FROM (
  3. SELECT REGEXP_SUBSTR(str, 'PN(\s|\:)+(\d|\w)+?[^ ]+', 1, LEVEL) AS substr
  4. FROM (
  5. SELECT 'P348955: REMOVE NHA P210 PANEL PN : 6703ELM21 and REMOVE SUB ASSY PN: ELM2000-10-10 (ITEM 70) QTY 2EA and PN: ELM200-11-10 OR ALT (ITEM 75) QTY 1EA snd PN ELM1057-1 QTY 1EA REQUESTED BY MMEECHAN REF ID 7369' AS str
  6. FROM DUAL
  7. )
  8. CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(str, 'PN(\s|\:)+(\d|\w)+?[^ ]+')) + 1
  9. )
  10. WHERE substr is not null;

相关问题