Snowflake LIKE通配符查询无结果问题求助
问题分析与解决方法
这问题我之前踩过一模一样的坑!一眼看下来是字符编码不匹配导致的,核心就是破折号的类型不一样:
问题核心
你插入的extid字段里的破折号是全角长破折号(Unicode 编码 U+2013),而你查询语句里写的是半角减号(U+002D)——这俩是完全不同的字符,数据库自然匹配不到结果。
验证方法
你可以用ASCII()函数直观看到两者的区别:
-- 查看数据中破折号的ASCII值 SELECT extid, ASCII(SUBSTRING(extid, POSITION('–' IN extid), 1)) AS dash_ascii FROM tsquery; -- 查看你查询里用的减号的ASCII值 SELECT ASCII('-') AS hyphen_ascii;
执行后会发现两个数值完全不同,这就是匹配失败的根本原因。
解决方案
有两种处理方式,根据你的需求选:
- 临时修正查询语句:把查询里的半角减号替换成和数据里一致的全角破折号:
SELECT * FROM tsquery WHERE extid LIKE '%WM–332'; - 统一数据格式:把表中所有全角破折号替换成半角减号,方便后续统一查询:
UPDATE tsquery SET extid = REPLACE(extid, '–', '-'); -- 替换后再用原查询语句就能查到结果 SELECT * FROM tsquery WHERE extid LIKE '%WM-332';
小建议
以后在处理字符串匹配的场景时,尽量统一使用半角符号,避免因为全角/半角、特殊符号的差异导致这类“看起来没问题但查不到”的诡异问题。
内容的提问来源于stack exchange,提问作者Vivek Sharma
相关产品推荐
相关产品推荐

