Найти записи, которые не имеют определенных символов - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть таблица, в которой есть столбец Name.Пользователь может указать несколько символов, чтобы столбец имени не содержал все эти символы.Как я могу сделать это динамически для неизвестного количества символов?

Спасибо

Ответы [ 3 ]

1 голос
/ 20 апреля 2019

Попробуйте это:

Select name from tbl
except
select name from tbl
join
(select substring(a.b, v.number + 1, 1) letter
from (select 'WCRTV' b) a
join master..spt_values v on v.number < len(a.b)
where v.type = 'P') chars
on name like '%' + chars.letter + '%'

Сначала вы берете string в качестве ввода, здесь вход представляет собой статическое значение 'WCRTV', затем, используя следующий код, вы можете преобразовать string в список chars (заслуга этого часть идет к этой ссылке ):

select substring(a.b, v.number + 1, 1) letter
from (select 'WCRTV' b) a
join master..spt_values v on v.number < len(a.b)
where v.type = 'P'

Затем вы объединяете результат со своей таблицей и, наконец, вычитаете результат из таблицы.

1 голос
/ 20 апреля 2019

Если вы хотите найти имена, содержащие запрещенные символы, используйте like:

select name
from tbl
where name like '%[' + @forbidden_characters + ']%'

Например, если игнорируемые символы являются числами, то @forbidden_characters будет содержать '0123455789'.

Если символы были сохранены в таблице, вы можете использовать JOIN:

select t.name, f.c
from t join
     @forbidden f
     on t.name like replace('%[<c>]%', '<c>', f.c);
0 голосов
/ 20 апреля 2019

используйте регулярное выражение с NOT LIKE "% [ваш персонаж]%"

...