有没有办法用 Teradata SQL 替换重音符号?
Is there a way to replace accents with Teradata SQL?
我有一个 varchar
列,我想用普通字母替换所有 diacritics
例如:
- 输入:
São Paulo
输出:Sao Paulo
- 输入:
eéíãç
输出:eeiac
变音字符是复合字符,即可以是基本字符加上变音符号,例如
'a' + '´' = 'á'
0061 + 00B4 = 00E1
006100B4
和 00E1
都产生相同的字符,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...')
我有一个 varchar
列,我想用普通字母替换所有 diacritics
例如:
- 输入:
São Paulo
输出:Sao Paulo
- 输入:
eéíãç
输出:eeiac
变音字符是复合字符,即可以是基本字符加上变音符号,例如
'a' + '´' = 'á'
0061 + 00B4 = 00E1
006100B4
和 00E1
都产生相同的字符,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)
如果您输入的字符串具有 LATIN 字符集,则可能更容易找到变音字符的有限列表并应用翻译:
oTranslate(str, 'àáâãäåÀÁÂÃÄÅÇ...', 'aaaaaaAAAAAAC...')