Snowflake中使用LIKE运算符比较两列报错求助
问题排查与解决
几个关键错误点
- 字段名写错了:你说明table1的城市字段是
City,但查询语句里用的是table1.city_name,这要么会导致字段不存在,要么如果city_name是数值类型,就会触发你看到的报错。 - 字符串拼接语法不对:不同数据库的字符串拼接规则不一样,
+不是通用的拼接符——比如MySQL、PostgreSQL不支持用+拼字符串,必须用CONCAT函数;就算是SQL Server支持+,如果字段类型不是字符串也会报错。 - 匹配逻辑搞反了:你的需求是找table2里包含table1规范城市名的记录,所以应该是
table2.CityLIKE 包含table1城市名的通配符串,而不是反过来。
针对不同数据库的正确查询语句
MySQL/PostgreSQL
用CONCAT函数拼接通配符:
SELECT table1.City FROM table2 JOIN table1 ON table2.City LIKE CONCAT('%', table1.City, '%');
SQL Server
两种写法都可以,用CONCAT更稳妥:
-- 写法1:用+拼接(需确保字段都是字符串类型) SELECT table1.City FROM table2 JOIN table1 ON table2.City LIKE '%' + table1.City + '%'; -- 写法2:用CONCAT函数(推荐) SELECT table1.City FROM table2 JOIN table1 ON table2.City LIKE CONCAT('%', table1.City, '%');
Oracle
用||作为连接符:
SELECT table1.City FROM table2 JOIN table1 ON table2.City LIKE '%' || table1.City || '%';
额外提醒
- 确认
table1.City和table2.City都是字符串类型(比如VARCHAR、TEXT),如果是数值类型,拼接时肯定会报错。 - 别再用
from table2, table1这种隐式连接了,显式JOIN语法更清晰,不容易出错。
内容的提问来源于stack exchange,提问作者Anisha A
相关产品推荐
相关产品推荐

