查找没有特定字符的记录

时间:2019-04-20 07:05:14

标签: sql sql-server sql-server-2016

我有一个表,其中有一个列Name。用户可以指定一些字符,以便名称列不应包含所有这些字符。如何动态处理未知数量的字符?

谢谢

3 个答案:

答案 0 :(得分:1)

尝试一下:

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转换为{{ 1}}(这一部分功劳归于this link):

chars

然后将结果与表连接起来,最后从表中减去结果。

答案 1 :(得分:1)

如果要查找包含禁止字符的名称,请使用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);

答案 2 :(得分:0)

使用不喜欢“%[your charecter]%”的正则表达式