以下是一栏中的文字:
P348955:删除NHA P210面板PN: 6703 ELM21和删除子组件PN: ALT 2000-10-10(项目70) QTY 2EA & PN :ALT 200-11-10 OR ALT(项目75) QTY 1EA和PN ALT 1057-1 QTY 1EA
我希望从该文本中提取所有类似的模式,该模式定义如下:
上显示的文本中提取以下内容
“PN:6703 ELM21”、“PN:ELM200 2000-10-10”、“PN:ELM200 200-11-10”、“PN ELM200 1057-1”
我尝试了以下几点:
SELECT REGEXP_SUBSTR( 'P348955: REMOVE NHA P210 PANEL PN : 6703ELM21 &
REMOVE SUB ASSY PN: ELM2000-10-10 (ITEM 70) QTY 2EA & PN: ELM200-11-10
OR ALT (ITEM 75) QTY 1EA & PN ELM1057-1 QTY 1EA REQUESTED BY MMEECHAN
REF ID 7369', '(PN+/s*+:?+/s*+[A-Z][0-9])' FROM DUAL;
期望输出为 PN: 6703ELM21,PN: ELM200 2000-10-10,PN :ELM200 200-11-10,PN ELM200 1057-1。
不确定如何获得此输出
发布于 2020-07-01 07:12:24
这将使您的输出每发生一行:
WITH test_data (str, pattern) AS
(
SELECT 'P348955: REMOVE NHA P210 PANEL PN : 6703ELM21 &
REMOVE SUB ASSY PN: ELM2000-10-10 (ITEM 70) QTY 2EA & PN: ELM200-11-10
OR ALT (ITEM 75) QTY 1EA & PN ELM1057-1 QTY 1EA REQUESTED BY MMEECHAN
REF ID 7369'
,'PN\s*:?\s*(\w|-)*'
FROM DUAL
)
SELECT regexp_substr(str,pattern,1,level,'im' ) FROM test_data
CONNECT BY regexp_substr(str,pattern,1,level,'im' ) IS NOT NULL;
PN : 6703ELM21
PN: ELM2000-10-10
PN: ELM200-11-10
PN ELM1057-1
发布于 2020-07-01 14:35:17
另一种选择:
SELECT substr
FROM (
SELECT REGEXP_SUBSTR(str, 'PN(\s|\:)+(\d|\w)+?[^ ]+', 1, LEVEL) AS substr
FROM (
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
FROM DUAL
)
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(str, 'PN(\s|\:)+(\d|\w)+?[^ ]+')) + 1
)
WHERE substr is not null;
https://stackoverflow.com/questions/62665143
复制相似问题