#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. ПРИВЕТ, Фил, большое спасибо за оперативный ответ. Я воспользовался вашим предложением, и запрос сработал как заклинание.