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

Snowflake SQL中LIKE ESCAPE如何组合转义下划线与通配符匹配指定编码

问题原因

你之前写的LIKE语句不生效,核心是两个问题:

  • 对ESCAPE转义规则和LIKE通配符的匹配逻辑理解有偏差:转义符^仅会转义紧跟在它后面的第一个字符,剩余的_都是单字符通配符;且_通配符可以匹配任意字符,包括下划线本身,加上开头的%是任意长度通配符,会出现匹配位置错位,无法精准卡住第二个下划线后的分段长度。
  • 标准SQL的LIKE语法没有“排除指定字符”的匹配能力,无法保证两个下划线之间的分段不含额外下划线,天然不适合这种按下划线分段、校验指定段长度的场景,硬写的话依赖特定数据库的扩展语法,通用性极差。
推荐方案:用RLIKE正则匹配

这是最稳妥、可读性最高、跨引擎兼容性最好的实现方式,逻辑完全贴合需求,不会出现匹配错位:

-- 匹配规则:第二个下划线后恰好3个英文字母,且编码以_QUATRO结尾
CASE 
  WHEN code RLIKE '^[^_]+_[^_]+_[a-zA-Z]{3}_.*_QUATRO$' THEN 1 
  ELSE 0 
END

正则分段解释:

  • ^:匹配字符串起始位置,避免前置内容错位
  • [^_]+_:匹配第一个分段+第一个下划线,[^_]+代表1个及以上非下划线字符
  • [^_]+_:匹配第二个分段+第二个下划线,精准定位到待校验片段的起点
  • [a-zA-Z]{3}:恰好匹配3个英文字母,符合你要求的“3个字母”规则;如果不需要校验字符类型,仅要求3个非下划线字符,替换为[^_]{3}即可
  • _:匹配第三个下划线,保证3个字母后立刻接下一个分段,不会出现多字符的情况
  • .*_QUATRO$:匹配后续任意分段,且字符串以_QUATRO结尾,和你原本的匹配范围一致

用你给的3条样例测试:

  • 前两条第二个下划线后是ITA,恰好3个字母,正常匹配
  • 第三条第二个下划线后是WCPE,共4个字符,会被直接排除,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:01:46