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

SQL表列校验如何用REGEXP_LIKE仅匹配数字和指定n.v.类合法值?

问题解决说明

错误原因

你之前的正则表达式错误使用了[]字符组语法:字符组只会匹配单个符合规则的字符,你把所有合法组合都写在字符组内,会被拆解为n/v/N/V/./,/数字这些可单独匹配的单个字符,再配合+(匹配1次及以上)规则,自然会出现单个n/v/N/V/点都能匹配成功的误判问题。

修正后查询代码

select count(*)
from table1
where column1 is null
or not REGEXP_LIKE(column1, '^([0-9]+|nv|n\\.v)$', 'i');

规则说明

修正后的正则完全匹配你的合法值要求:

  • 用^和$强制匹配整个字段值,避免部分匹配的误判
  • 分组内用|分隔两类合法值:
    • 纯数字:[0-9]+匹配1位及以上的纯数字内容
    • 合法字符串:配合第三个参数i开启不区分大小写匹配,nv匹配所有大小写组合的无点字符串,n\.v匹配所有大小写组合的中间带点字符串,完全覆盖你列出的8种合法字符串场景,不会匹配单个字符

如果你的需求中允许n.v.(末尾带点)的格式,只需将正则调整为^([0-9]+|nv|n\\.v\\.?)$即可覆盖v后带点/不带点的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:57:02