我有一张桌子,它有一个列Name
。用户可以指定一些字符,以便name列不应包含所有这些字符。我如何动态地为未知数量的字符做这个?
谢谢
试试这个:
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
列表(这部分的功劳归于this link):
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'
然后将结果与表连接,最后从表中减去结果。
如果要查找包含禁用字符的名称,请使用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);
使用NOT LIKE“%[你的角色]%”的正则表达式