如何在Snowflake中规范化Unicode字符串并判断字符串等价?
在Snowflake中判定Unicode兼容等价字符串
你遇到的问题是两个视觉上一致的字符串(半角假名+全角字母组合 vs 全角假名+半角字母组合)直接比较返回FALSE——这是因为它们的底层Unicode编码不同,但属于兼容等价范畴(比如半角/全角假名、全角/半角字母的对应关系)。
要判定这类字符串的本质等价性,用Snowflake的NORMALIZE函数就能解决。它支持Unicode的多种规范化形式,针对兼容等价场景,优先用NFKC或NFKD参数:
NFKC:先对兼容字符做分解,再进行规范重组,最终输出紧凑的等价字符串,最适合直接匹配场景NFKD:仅做兼容分解不重组,结果可能是多字符组合,也能用于匹配,但NFKC在字符串比较中更常用
修改你的查询,对两个字符串都做NFKC规范化后再比较:
SELECT '株式会社サイバーエージェントDX' AS a, '株式会社サイバーエージェントDX' AS b, a = b AS 直接比较结果, NORMALIZE(a, 'NFKC') = NORMALIZE(b, 'NFKC') AS 规范化后比较结果;
这个查询里,规范化后比较结果会返回TRUE——NFKC会自动把半角假名转成全角、全角字母转半角,让两个字符串变成完全一致的规范化形式。
内容的提问来源于stack exchange,提问作者Felipe Hoffa
相关产品推荐
相关产品推荐

