首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >去除Snowflake中字符串的重音

去除Snowflake中字符串的重音
EN

Stack Overflow用户
提问于 2021-03-13 04:10:37
回答 2查看 454关注 0票数 1

我正在尝试删除Snowflake中字符串列中的所有重音。在MSSQL中,我可以使用collate函数来完成此操作。例如,我在一个列中有这个字符串:‘JES?SSMITH12345’。我想去掉U上方的重音符号:

在MSSQL中,我可以执行以下操作:

代码语言:javascript
复制
select ('JESÚSSMITH12345' Collate SQL_Latin1_General_CP1253_CI_AI) as identifier

返回:JESUSSMITH12345

但是,除了使用TRANSLATE函数之外,我找不到在Snowflake中执行此操作的方法。使用翻译函数不是一个好的解决方案,因为我必须用重音来定义每个可能的字母来进行翻译。例如,这在Snowflake中有效:

代码语言:javascript
复制
select translate('JESÚSSMITH12345', 'Ú', 'U');

返回:JESUSSMITH12345

但是,如果列包含除U以外的任何带重音的值,我必须将其添加到我的翻译中。这并不理想。

使用Snowflake中的collate函数,即使使用"ai“(也就是不区分重音的),它仍然会返回带有重音U的字符串。

例如在Snowflake中:

代码语言:javascript
复制
select collate('JESÚSSMITH12345', 'en-ai');  

返回:JESÚSSMITH12345

EN

回答 2

Stack Overflow用户

发布于 2021-03-13 04:41:23

更新:使用Greg Pavlik的{Diacritic}更好的JS行

代码语言:javascript
复制
return str.normalize("NFD").replace(/\p{Diacritic}/gu, "");

你可以在Snowflake中使用JS UDF来解决这个问题:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION normalize_js(S string)
  RETURNS string
  LANGUAGE JAVASCRIPT
  AS 'return S.normalize("NFD").replace(/[\u0300-\u036f]/g, "");'
;

select normalize_js('áéÉña');

-- 'aeEna'

我从Remove accents/diacritics in a string in JavaScript得到了JS代码。

票数 3
EN

Stack Overflow用户

发布于 2021-03-13 04:27:34

您面临的问题是,U和ª是完全不同的字符,因此从编码/SQL的角度来看,“从U上方删除重音”这句话是没有意义的。

惟一的选择是使用TRANSLATE函数(或者在存储过程中构建等效功能),就像您已经做的那样。您需要获取ASCII值为>= 128的每个字符,并提供要用其替换的字符。您可以对此进行硬编码,或者,为了获得更大的灵活性,可以将重音字符和您想要将其转换为的字符放入一个表中,并在SP中使用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66606576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档