Regex 使用正则表达式提取SQL中的字符串部分
大家好 我有一个关于SQL中正则表达式的查询 我有一个例子,字符串的一部分必须从列中提取。该列的部分将以我的A列作为前缀。请查看示例数据的屏幕截图。我还在一个单独的列中添加了预期的输出(以绿色突出显示) 场景:Regex 使用正则表达式提取SQL中的字符串部分,regex,oracle,Regex,Oracle,大家好 我有一个关于SQL中正则表达式的查询 我有一个例子,字符串的一部分必须从列中提取。该列的部分将以我的A列作为前缀。请查看示例数据的屏幕截图。我还在一个单独的列中添加了预期的输出(以绿色突出显示) 场景: 现在,如果一个列值有超过1个唯一的数字,那么必须以Null显示 例如:在批准后验证CAN06010025,CAN06010026和CAN06010030 在上面的字符串中,我有多个数字(粗体部分) 这种情况应该被忽略(这意味着它必须给我空值) 如果只有一个数字,如果它是重复的,那么我必须
SELECT
ColA,
ColB,
case when REGEXP_COUNT(ColB,ColA) >2 THEN NULL
ELSE REPLACE(REPLACE(concat(regexp_substr(ColB,ColA||'([[:alnum:]]+\.?)'),
nvl(regexp_substr(ColB,ColA||'(\-[[:digit:]]+)'),
regexp_substr(ColB,ColA||'([[:space:]]\-[[:space:]][[:digit:]]+)'))),
' ',''),'.','')
END AS Result
FROM
table
测试数据:
A列
CAN06
美国12
USA27
HUN04
CAN05
USA24
CAN06
列B 在批准后验证CAN06010025、CAN06010026和CAN06010030 项目USA12:Id USA12S001:需要联系-USA12S001-待更新表格 项目USA27:Id:USA27S001:Prod 在到期日后查看id HUN04S002-HUN04S004 ID:CAN05S005,详细信息如CAN05S005已完成 项目USA24:Id:USA24S009:数据发布
“Project:Subject CAN06S009:V2&V3-Id CAN06S010:V1”如果
REGEXP\u计数是唯一的问题,那么答案很简单:更改
case when REGEXP_COUNT(ColB,ColA) >2
致:
感谢您的关注,Tim,我正在使用Oracle来实现这一点。请将测试数据作为文本而不是图像发布-我无法复制您的图像并将其粘贴到我的SQL编辑器中。
case when REGEXP_COUNT(ColB,ColA || '[[:alnum:]]') >2