Столбец символов Teradata со значениями, отличными от алфавита

#sql #teradata

Вопрос:

У меня есть столбец имени в Teradata, в котором полное имя клиента указано в одном столбце. Есть несколько имен с -,_,.,/,#,! между символами имени. Я хочу иметь возможность извлекать записи, в которых есть имена с этими условиями. Есть ли лучший вариант для извлечения записей со сценарием ниже?

В настоящее время я пишу запрос, подобный этому, ВЫБЕРИТЕ ИМЯ ИЗ ИСТОЧНИКА ТАБЛИЦ, ГДЕ ИМЯ, КАК И ЛЮБОЕ ДРУГОЕ(‘%-%’,’%.%’,’%#%’,’%~%’,’%!%’)

Заранее спасибо.

Комментарии:

1. Вы можете использовать регулярное выражение, оно фильтрует любые символы, выходящие за пределы диапазона от a до z: where regexp_similar(name, '.*[^a-z] .*', 'i') = 1

2. Спасибо за ваш ответ, дноет, я получил сообщение об ошибке 9234, в котором говорится, что шаблон не является допустимым шаблоном. Кстати, мне нужно иметь возможность извлекать записи с любым из вышеперечисленных символов. Например, предположим, что имя имеет следующие значения: Сара% Триста Норман, Майк $Сильвер, Трэвис! Стайлз, Джейми Фонг, Джо Доу. Я должен получить такие результаты, как Сара% Триста Норман, Майк $Сильвер, Трэвис! Стили, использующие запрос, НАПРИМЕР, НАЗОВИТЕ ЛЮБОЙ(‘%$%’,’%!%’). Я создал тестовые данные и не смог извлечь строку с % в именах. Я написал КАК ИМЯ»%%%». Как получить строки имен, в которых есть%?

3. '.*[^a-z] .*' является ли допустимым шаблоном, каков ваш выпуск Teradata? Вы также можете перечислить эти известные символы: where regexp_similar(name, '..*[-%_./#!$] .*', 'i') = 1 . Относительно % того, как вы должны избежать этого like '%%%' escape ''

Ответ №1:

Я не проверял это, но я думаю, что вы могли бы проверить равенство, когда эти символы удаляются из имени с помощью otranslate

 select name 
from tablesource 
where name <> otranslate(name,'-.#~!','') 
 

Комментарии:

1. ПРИВЕТ, Фил, большое спасибо за оперативный ответ. Я воспользовался вашим предложением, и запрос сработал как заклинание.