如何在Teradata中将unicode翻译成拉丁语?
我的表包含一个字段如何在Teradata中将unicode翻译成拉丁语?,unicode,teradata,latin,Unicode,Teradata,Latin,我的表包含一个字段lastName,即UNICODE 我需要实现SOUNDEX函数,但它不起作用,因为它只需要拉丁语。因此,我尝试将其转换为拉丁语,但仍然得到相同的错误只允许使用拉丁字母 这是我试过的 SEL * FROM tab_test WHERE SOUNDEX(REGEXP_REPLACE(lastName, '[^A-Z]', '')) = 'smith' SEL * FROM tab_test WHERE SOUNDEX(TRANSLATE(lastNameUSING u
lastName
,即UNICODE
我需要实现SOUNDEX
函数,但它不起作用,因为它只需要拉丁语。因此,我尝试将其转换为拉丁语
,但仍然得到相同的错误只允许使用拉丁字母
这是我试过的
SEL *
FROM tab_test
WHERE SOUNDEX(REGEXP_REPLACE(lastName, '[^A-Z]', '')) = 'smith'
SEL *
FROM tab_test
WHERE SOUNDEX(TRANSLATE(lastNameUSING unicode_to_latin)) = 'smith'
我怎样才能纠正这个问题
编辑
以下是我按照德诺思的建议所做的尝试。但它仍然不起作用
SEL *
FROM tab_test
WHERE SOUNDEX(TRANSLATE(REGEXP_REPLACE(
lastName,'[^a-zA-Z]','') USING
UNICODE_TO_LATIN)) = 's530'
SEL lastName, REGEXP_REPLACE(lastName, '[^a-zA-Z]', '') lastName_regex
FROM (SEL *
FROM tab_test
WHERE personId < 10
) der
WHERE SOUNDEX(REGEXP_REPLACE(lastName, '[^a-zA-Z]', '')) = 's530'
编辑2
这是一个不起作用的查询
SEL *
FROM tab_test
WHERE SOUNDEX(TRANSLATE(REGEXP_REPLACE(
lastName,'[^a-zA-Z]','') USING
UNICODE_TO_LATIN)) = 's530'
SEL lastName, REGEXP_REPLACE(lastName, '[^a-zA-Z]', '') lastName_regex
FROM (SEL *
FROM tab_test
WHERE personId < 10
) der
WHERE SOUNDEX(REGEXP_REPLACE(lastName, '[^a-zA-Z]', '')) = 's530'
您的正则表达式也删除了小写的a到z
那就试试吧
REGEXP_REPLACE(lastName, '[^a-zA-Z]', '') -- explicitly add lowercase
或
顺便说一句,SOUNDEX(“smith”)的结果不是“smith”,而是“s530”。您可能需要
[^a-zA-Z]+
i、 e,“+”尝试使用UNICODE\u TO\u拉丁语,出现错误我仍然会遇到同样的错误。正则表达式没有帮助,奇怪的是,这应该是可行的。您确切的Teradata版本是什么(select*from dbc.dbcinfoV,其中InfoKey='release'
)?你能显示一些坏数据吗,仅仅是REGEXP_REPLACE的结果吗?发布版本是14.00.07.14
坏数据看起来正常。我直接从SQL助手复制了它。上面的这个小示例不起作用。肯定还有其他原因,在使用SOUNDEX时,您显示的数据不会导致错误。
[^a-zA-Z]+