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

Oracle如何用单个REGEXP_LIKE匹配Dxyx(y+1)x(y+2)格式的nbr值

Oracle正则匹配nbr字段规则解决方案

最终查询语句

SELECT * 
FROM tbl
WHERE formatnbr = 101
  AND REGEXP_LIKE(nbr, '^\d(\d)(?:0\11\12|1\12\13|2\13\14|3\14\15|4\15\16|5\16\17|6\17\18|7\18\19)$');

如果你的Oracle版本不支持非捕获组语法,直接删除正则里的?:即可,匹配逻辑完全不变。

规则拆解说明

你描述的Dxyx(y+1)x(y+2)7位nbr规则可以拆解为两个核心要求:

  • 第2、4、6位数字完全相同
  • 第3、5、7位是连续递增1的数字,仅存在8种合法组合:012、123、234、345、456、567、678、789

正则表达式解释

  • ^和$限定匹配完整7位字符串,避免部分匹配
  • 第一个\d匹配第1位任意数字
  • (\d)捕获第2位数字为分组1,后续用\1反向引用该值,保证第4、6位和第2位一致
  • 非捕获组(?:...)内的8个分支,分别对应第3、5、7位的8种合法连续数字组合,同时嵌入反向引用保证第4、6位符合要求
    这个写法兼容所有支持REGEXP_LIKE的Oracle版本,执行效率远高于多个REGEXP_LIKE拼接的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:54:05