Snowflake中LIKE '%[^a-z]ACCESS[^a-z]%'等效写法及匹配独立access问题
问题解答
1. 为什么ILIKE '% access %'会返回包含accessibility的结果
ILIKE '% access %'的逻辑是匹配包含" access "(前后各带一个空格)的字符串。如果结果里出现了accessibility,大概率是你的数据中存在类似access ibility(access和ibility之间被空格拆分)的记录,导致该条件命中。
另外这个写法本身有局限性:它只能匹配access前后是空格的情况,无法覆盖access在字符串开头(如access is useful)、结尾(如useful access),或者前后是标点/特殊字符(如(access)、access.)的场景,也不能精准排除access作为其他单词子串的情况(比如未被拆分的accessibility本身不会被这个条件匹配到)。
2. Snowflake中LIKE '%[^a-z]ACCESS[^a-z]%'的等效写法
Snowflake的LIKE语法不支持SQL Server那种[^a-z]的字符类通配符,需要改用正则表达式函数REGEXP_LIKE,根据需求有两种常用写法:
(1)匹配独立单词access(忽略大小写,最常用)
如果要精准匹配作为独立单词的access(排除作为其他单词子串的情况,比如accessibility),用单词边界\\b:
REGEXP_LIKE(你的字段名, '\\baccess\\b', 'i')
\\b:匹配单词边界(区分字母/数字/下划线和其他字符的分界)'i':忽略大小写,和ILIKE的行为一致
(2)严格匹配access前后是非小写字母的字符(贴近原SQL逻辑)
如果要完全对应原SQL中[^a-z]的逻辑(匹配access前后不是小写字母的字符),同时覆盖字符串开头/结尾的情况:
REGEXP_LIKE(你的字段名, '(^|[^a-z])access([^a-z]|$)', 'i')
^:匹配字符串开头,$:匹配字符串结尾[^a-z]:匹配非小写字母的任意字符'i':忽略大小写,若需要区分大小写可去掉该参数
内容的提问来源于stack exchange,提问作者lohith ramineni
相关产品推荐
相关产品推荐

