在Snowflake中使用EXCEPT子句时如何忽略大小写?
EXCEPT关键字忽略大小写差异的实现方法
默认情况下EXCEPT会区分字符大小写(从你的查询结果来看,当前数据库环境是区分大小写的)。要让大小写不同的值被视为相等,从而让查询返回空结果,可通过以下两种方式实现:
方案1:统一转换为小写/大写(跨数据库通用)
将两个查询中的col1统一转换为小写或大写,这样'hello'和'HELLO'会被处理为相同值,EXCEPT就不会返回差异结果:
SELECT LOWER(col1) FROM table1 EXCEPT SELECT LOWER(col1) FROM table2;
或者转换为大写:
SELECT UPPER(col1) FROM table1 EXCEPT SELECT UPPER(col1) FROM table2;
方案2:指定不区分大小写的排序规则(数据库特定)
如果你的数据库支持指定排序规则,可直接为列设置不区分大小写的规则,以SQL Server为例:
SELECT col1 COLLATE SQL_Latin1_General_CP1_CI_AS FROM table1 EXCEPT SELECT col1 COLLATE SQL_Latin1_General_CP1_CI_AS FROM table2;
注:不同数据库的排序规则语法不同,比如MySQL可用COLLATE utf8_general_ci,Oracle可用NLSSORT(col1, 'NLS_SORT=BINARY_CI'),这种方式能保留原字段格式,但跨数据库兼容性不如大小写转换方案。
内容的提问来源于stack exchange,提问作者Lakshmi
相关产品推荐
相关产品推荐

