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

Oracle SQL中用正则匹配两表字段并筛选不匹配记录

Oracle SQL 筛选字段不匹配记录解决方案

根据需求,我们需要通过正则表达式提取两张表中字段的有效匹配部分,忽略无关前缀、分隔符和数字前导零,最终筛选出处理后内容不匹配的记录。以下是补充正则后的完整SQL及正则说明:

完整SQL代码

SELECT a.ID, a.EXAMPLE_STRING, b.EXAMPLE_STRING
FROM Table1 a
INNER JOIN Table2 b
ON a.ID = b.ID
WHERE 
    REGEX_REPLACE(
        REGEX_REPLACE(a.EXAMPLE_STRING, '^.*?0888DY|[(),:]', ''),
        '([A-Z])0+([1-9]\d*)', '\1\2'
    ) != 
    REGEX_REPLACE(
        REGEX_REPLACE(b.EXAMPLE_STRING, '^.*?0888DY|[(),:]', ''),
        '([A-Z])0+([1-9]\d*)', '\1\2'
    );

正则表达式说明

  1. 第一层REGEX_REPLACE:清理无关内容

    • ^.*?0888DY:匹配从字符串开头到0888DY的所有内容(非贪婪匹配,确保只去掉前缀部分),替换为空
    • [(),:]:匹配括号、逗号、冒号这些分隔符,替换为空
      这一步完成后,会把示例中的(0888DY:A001:B2:C3)转换为A001B2C3,0888DY,A1:B2:C3转换为A1B2C3。
  2. 第二层REGEX_REPLACE:去除数字前导零

    • ([A-Z])0+([1-9]\d*):匹配大写字母后跟随的一个或多个前导零,以及后续的非零数字(和可能的后续数字)
    • \1\2:保留大写字母和去除前导零后的数字部分
      这一步会把A001转换为A1,最终得到符合匹配规则的字符串。

执行上述SQL后,会筛选出像ID2这样处理后内容不匹配的记录,忽略ID1这类匹配的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:58:17