2015-08-05 5 views
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' 

Как я могу исправить проблему


EDIT

Вот что я пробовал, как предлагает dnoeth. Но она по-прежнему не работает

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

EDIT 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

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    

ответ

3

Ваше регулярное выражение удаляет строчными А до Я тоже.

Так что попробуйте либо

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

или

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

Btw, результат SOUNDEX('smith') не 'кузнец', но 'S530'.

+0

Я все еще получаю ту же ошибку. Регулярное выражение не помогает – Pasha

+0

Это должно работать, странно. Каков ваш точный релиз Teradata ('select * from dbc.dbcinfoV где InfoKey = 'Release'')? Можете ли вы показать некоторые плохие данные, только результат REGEXP_REPLACE? – dnoeth

+0

Релиз \t '14.00.07.14' Плохие данные выглядят нормально. Я скопировал его непосредственно из SQL-помощника. Этот небольшой пример выше не работает – Pasha

0

Вам может понадобиться

[^a-zA-Z]+ 

т.е., то "+"

+0

Нет, REGEXP_REPLACE работает без '+'. – dnoeth

0

Попробуйте использовать UNICODE_TO_LATIN ПОГРешНОСТеЙ

Смежные вопросы