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

Snowflake筛选含数字行方法 regexp_like匹配不生效怎么办

Snowflake 筛选字段包含数字行的实现方案

之前写法失效的核心原因

你之前的正则写法不生效是踩了Snowflake正则函数的两个默认规则坑:

  • REGEXP_LIKE默认是全字符串匹配,会自动在正则规则首尾加^和$锚定,你写[0-9]、\d只会匹配整列值刚好是单个数字的行,无法匹配长字符串中包含数字的场景。
  • Snowflake单引号包裹的字符串中,反斜杠\默认是转义字符,直接写'\d'不会被识别为数字元字符,会被解析为无效的匹配规则。
  • LIKE仅支持%(任意长度任意字符)、_(单个任意字符)两个通配符,原生不支持数字类的范围匹配,硬写需要拼接10个OR条件(col1 LIKE '%0%' OR col1 LIKE '%1%' ...),冗余且效率差,不推荐使用。

可直接运行的正确写法

写法1:最通用无转义坑版本(推荐)

直接用[0-9]匹配数字,前后加.*匹配任意前后缀,适配所有Snowflake版本,不需要记额外转义规则:

SELECT * FROM b
WHERE REGEXP_LIKE(col1, '.*[0-9].*');

写法2:更简洁的子串匹配版本

用Snowflake原生的REGEXP_CONTAINS函数,这个函数本身就是判断字符串中是否存在匹配正则的子串,不需要手动加前后通配符:

SELECT * FROM b
WHERE REGEXP_CONTAINS(col1, '[0-9]');

写法3:使用\d元字符的版本

如果习惯用\d代表数字,要注意转义规则,两种写法都可以:

-- 单引号场景下用双反斜杠转义
SELECT * FROM b WHERE REGEXP_CONTAINS(col1, '\\d');

-- 用Snowflake美元定界符包裹字符串,不需要额外转义反斜杠
SELECT * FROM b WHERE REGEXP_CONTAINS(col1, $$\d$$);

结果验证

针对你给出的测试数据集,以上写法会准确返回5条包含数字的记录:

  • avr100000
  • 20170910020359.761
  • adf56ds76gwr
  • 0+093000
  • 080000
    纯文本的adfdsgwr、Enterprise两条记录会被正常过滤,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:01:21