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

Oracle查询如何过滤含斜杠的无效数据 现有正则匹配不生效

问题分析

原有查询的过滤条件存在两处逻辑问题:

  • 正则中[\/]$的$锚定符限制了仅能匹配字符串末尾的斜杠,无法过滤斜杠出现在字符串中间位置的记录
  • 斜杠匹配规则被包含在_(...)的分组内,仅能匹配下划线后紧跟斜杠的场景,无法匹配斜杠出现在其他位置的记录
调整方案

方案1:修改正则适配需求

如果需要保留正则写法,调整正则规则即可同时覆盖原有过滤逻辑和任意位置斜杠的过滤需求:

AND NOT REGEXP_LIKE (RJ_INTRACITY_LINK_ID,'_(9|31|4|7|_____|U)|\/','i')

改动说明:将斜杠匹配从下划线分组中独立出来,去掉末尾锚定符$,只要字符串中出现斜杠就会被匹配到,配合NOT关键字即可排除所有含斜杠的记录。

方案2:拆分条件提升执行效率(推荐)

简单字符存在性判断使用普通字符串函数性能远高于正则,高数据量场景下推荐拆分条件实现:

-- 保留原有正则的过滤逻辑
AND NOT REGEXP_LIKE (RJ_INTRACITY_LINK_ID,'_(9|31|4|7|_____|U)','i')
-- 新增斜杠过滤:INSTR返回0表示字符串中不存在斜杠
AND INSTR(RJ_INTRACITY_LINK_ID, '/') = 0
完整调整后的查询语句
SELECT TO_CHAR(RJ_INTRACITY_LINK_ID) AS SPAN_ID, 
       TO_CHAR(RJ_MAINTENANCE_ZONE_CODE) AS MAINT_ZONE_CODE
  FROM NE.MV_SPAN@DB_LINK_NE_VIEWER
                  --   FROM  APP_FTTX.span@SAT
 WHERE LENGTH(RJ_INTRACITY_LINK_ID) > 8 
   AND LENGTH(RJ_INTRACITY_LINK_ID) < 21            
   AND INVENTORY_STATUS_CODE = 'IPL' 
   AND RJ_MAINTENANCE_ZONE_CODE = 'INUEABDD01'
   AND NOT REGEXP_LIKE (RJ_INTRACITY_LINK_ID,'_(9|31|4|7|_____|U)','i')
   AND INSTR(RJ_INTRACITY_LINK_ID, '/') = 0
 MINUS         
SELECT TO_CHAR(LINK_ID) AS SPAN_ID,
       TO_CHAR(MAINTENANCEZONECODE) AS MAINT_ZONE_CODE
  FROM TBL_FIBER_INV_JOBS
 WHERE SPAN_TYPE = 'INTRACITY'
   AND MAINTENANCEZONECODE = 'INUEABDD01'
 ORDER BY 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 16:42:02