You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL提取tbl_notes表中以M开头且后续两位为重复字符的大写字符串并拆分展示

Oracle SQL: Extract M-Prefixed Strings with Duplicate Trailing Characters

我来帮你搞定这个需求,这里有个可以直接运行的Oracle SQL语句,完全符合你要的输出格式:

SELECT t.id,
       REGEXP_SUBSTR(t.notes, 'M([A-Z0-9])\1', 1, LEVEL) AS Locations
FROM tbl_notes t
CONNECT BY LEVEL <= REGEXP_COUNT(t.notes, 'M([A-Z0-9])\1')
       AND PRIOR t.id = t.id
       AND PRIOR SYS_GUID() IS NOT NULL
WHERE REGEXP_SUBSTR(t.notes, 'M([A-Z0-9])\1', 1, LEVEL) IS NOT NULL
ORDER BY t.id;

关键细节解释:

  1. 正则表达式匹配规则:M([A-Z0-9])\1

    • 开头的M指定匹配大写字母M开头的字符串
    • ([A-Z0-9])是一个捕获组,匹配任意单个大写字母或数字
    • \1表示重复捕获组里的内容,确保紧跟M的两个字符完全相同(比如EE、44、TT这类)
  2. 拆分多行的逻辑:

    • REGEXP_COUNT统计每条记录中符合规则的字符串数量
    • CONNECT BY LEVEL <= ...根据统计的数量生成对应行数,把同一记录里的多个匹配项拆分成单独的行
    • PRIOR t.id = t.id和PRIOR SYS_GUID() IS NOT NULL是Oracle里避免笛卡尔积的常用技巧,确保只针对当前记录拆分,不会和其他记录交叉生成多余行
  3. 过滤空值:
    最后的WHERE子句会过滤掉没有匹配结果的行,避免出现空的Locations值

运行后得到的输出:

IDLocations
12MEE
13M44
13MTT
13MZZ
14MVV
14M99

如果你的业务场景需要支持小写M或者其他字符,只需要调整正则表达式的范围(比如把[A-Z0-9]改成[A-Za-z0-9]),或者加上'i'参数忽略大小写即可。

内容的提问来源于stack exchange,提问作者user12345

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:27:49