如何在Snowflake中查询指定列包含非ASCII字符的所有行
Snowflake查询含非ASCII字符行的正确方案
方案1:正则匹配(推荐,适配所有非ASCII场景)
直接匹配所有不在标准ASCII编码范围内的字符,只要列中存在任意一个符合要求的字符就会命中:
SELECT * FROM table_name WHERE REGEXP_LIKE(column_name, '.*[^\\x00-\\x7F].*');
说明:\x00-\x7F是标准ASCII字符的十六进制编码范围,[^\\x00-\\x7F]就匹配所有非ASCII字符,包含你需要定位的Ã、Ä、Ç、Ô、ÿ等扩展字符。
方案2:ASCII转换比较(写法更简洁)
利用Snowflake内置的TO_ASCII函数实现编码转换对比,替代你之前报错的CONVERT写法:
SELECT * FROM table_name WHERE column_name <> TO_ASCII(column_name);
说明:TO_ASCII会将所有非ASCII字符转换为ASCII兼容的替换字符,转换后的值与原值不等即代表原值包含非ASCII字符。
原有方案失效原因
- 正则方案失效:原语句
[^a-zA-Z0-9]会误判ASCII范围内的空格、标点等合法ASCII字符,且语句缺少闭合单引号存在语法错误 - CONVERT方案失效:Snowflake的CONVERT函数仅支持数据类型转换,不支持编码转换的USING参数,因此执行报错
内容的提问来源于stack exchange,提问作者QMan5
相关产品推荐
相关产品推荐

