sql - 如何从 Oracle Sql 中的列中获取所有模式
问题描述
以下是列中的文本:
P348955:移除 NHA P210 面板 PN:6703ELM21 和移除子组件 PN:ELM2000-10-10(第 70 项)数量 2EA 和 PN:ELM200-11-10 或 ALT(第 75 项)数量 1EA 和 PN ELM1057-1 要求数量 1EA由 MMEECHAN 参考编号 7369
我希望从该文本中提取所有类似的模式,模式定义如下:
- 查找以“PN”或“PN:”或“PN”开头的任何内容
- 提取上述模式后面的字母数字字符,我希望从上面显示的文本中提取以下内容
'PN:6703ELM21','PN:ELM2000-10-10','PN:ELM200-11-10','PN ELM1057-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:ELM2000-10-10,PN:ELM200-11-10,PN ELM1057-1
不确定如何获得此输出
解决方案
这将使您的输出为每次出现一行:
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
推荐阅读
- php - 在 laravel 中哪里可以找到 Auth::attempt 方法
- json - 如何在 JSON 中创建树结构表示?
- excel - Excel VBA - 如果从 VBS 调用范围方法失败
- javascript - 说明:for-loop 上的 Ajax
- python - 如何转储(和重新加载)django allauth 社交应用程序数据到/从文件
- c# - 当重复调用相同的函数时,编码的 UI 测试会停止而不停止
- reactjs - Mocha 在导入时无法识别 React
- reactjs - 如何将 .Net Core WebAPI 和 React JS 应用程序部署到单个 Docker 容器
- c# - 如何以编程方式放大?
- tensorflow - 使用 tensorflow 训练 mnist 数字数据集时的密集形状错误