Snowflake/Redshift按空字符串分组忽略长度的原因与解决方案
不同数据仓库对不同长度空格字符串分组的差异原因与解决方法
差异原因
- Redshift和Snowflake在字符串分组比较时,会自动忽略末尾的空格(这是沿用了SQL标准里
CHAR类型的比较逻辑,哪怕是VARCHAR类型也会遵循这个规则),所以不管是1个空格还是3个空格的字符串,都会被判定为相等,分组后自然只返回1行。 - BigQuery则严格按字符串的实际内容和长度来判定是否相等,不同长度的纯空格字符串会被当成不同的值,所以有多少种不同长度的空格,分组后就返回多少行。
规避方法
如果要在Redshift和Snowflake里区分不同长度的纯空格字符串,试试这两种方法:
- 把字符串长度加入分组条件:用
LENGTH()函数获取空格的长度,将其和原字段一起作为分组依据,示例SQL:SELECT blank_names, LENGTH(blank_names) FROM table GROUP BY blank_names, LENGTH(blank_names) - 转成二进制后分组:二进制形式会完整保留字符串的长度和内容信息,以此分组就能区分不同长度的空格,示例SQL:
SELECT blank_names FROM table GROUP BY TO_BINARY(blank_names)
内容的提问来源于stack exchange,提问作者Tanner Clary
相关产品推荐
相关产品推荐

