1

我的表包含一个lastName字段UNICODE

我需要实现该SOUNDEX功能,但它不起作用,因为它只需要latin. 所以我尝试将其转换为latin但仍然得到相同的错误only latin letters allowed

这是我尝试过的

SEL * 
FROM tab_test
WHERE SOUNDEX(REGEXP_REPLACE(lastName, '[^A-Z]', '')) = 'smith' 



SEL * 
FROM tab_test
WHERE SOUNDEX(TRANSLATE(lastNameUSING unicode_to_latin)) = 'smith' 

我该如何纠正这个问题


编辑

这是我尝试过的 dnoeth 建议的。但它仍然不起作用

     SEL * 
     FROM tab_test
     WHERE SOUNDEX(TRANSLATE(REGEXP_REPLACE(
     lastName,'[^a-zA-Z]','') USING   
     UNICODE_TO_LATIN))  = 's530' 
     

编辑 2

这是不起作用的查询

 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'  

REGEXP 子查询的结果如下

SEL  lastName, REGEXP_REPLACE(lastName, '[^a-zA-Z]', '') lastName_regex 
 FROM (SEL * 
 FROM tab_test
 WHERE personId < 10 
 ) der  

结果直接从 teradata sql assistant 复制

    LASTNAME    lastName_regex
1   Smith                   Smith              
2   Smith                   Smith              
3   Smith                   Smith              
4   Smith                   Smith              
5   Smith                   Smith              
6   Smith                   Smith              
7   Smith                   Smith              
8   Smith                   Smith              
4

3 回答 3

3

您的正则表达式也会删除小写 a 到 z。

所以试试

REGEXP_REPLACE(lastName, '[^a-zA-Z]', '') -- explicitly add lowercase

或者

REGEXP_REPLACE(lastName, '[^A-Z]', '',1,0,'i')) -- do a case insensitive comparison

顺便说一句, a 的结果SOUNDEX('smith')不是“smith”,而是“s530”。

于 2015-08-05T15:21:21.767 回答
0

你可能需要

[^a-zA-Z]+

即“+”

于 2016-10-03T19:04:03.350 回答
0

尝试使用带有错误的 UNICODE_TO_LATIN

于 2016-12-15T20:53:02.260 回答