有没有办法用 Teradata SQL 替换重音符号?

Is there a way to replace accents with Teradata SQL?

我有一个 varchar 列,我想用普通字母替换所有 diacritics

例如:

变音字符是复合字符,即可以是基本字符加上变音符号,例如

   'a' +  '´' =  'á'
  0061 + 00B4 = 00E1   
    

006100B400E1 都产生相同的字符,Unicode 允许使用 Teradata 支持的 规范化 函数来回切换:

translate(string using UNICODE_TO_UNICODE_NFD)

将复合字符分解为单独的字符。这些 组合变音符号 位于从 U+0300 到 U+036F 的 Unicode 块中。

现在分解输入并应用正则表达式删除此范围内的字符:

select
   'Ťĥïŝ ẅåš á şťŕĭńġ ŵïţĥ ḿäṇȳ ḓìāčṝĩţïĉș' as str,
   REGEXP_REPLACE(translate(str using UNICODE_TO_UNICODE_NFD) -- decomposed input
                 ,'[\x{0300}-\x{036F}]'                        -- diacritics
                 ,'')

returns

Ťĥïŝ ẅåš á şťŕĭńġ ŵïţĥ ḿäṇȳ ḓìāčṝĩţïĉș
This was a string with many diacritics

如果还有其他可分解的字符,您可能需要使用另一个 translate(... using UNICODE_TO_UNICODE_NFC)

再次组合它们以保存 space

如果您输入的字符串具有 LATIN 字符集,则可能更容易找到变音字符的有限列表并应用翻译:

oTranslate(str, 'àáâãäåÀÁÂÃÄÅÇ...', 'aaaaaaAAAAAAC...')