查找没有特定字符的记录

问题描述 投票:0回答:3

我有一张桌子,它有一个列Name。用户可以指定一些字符,以便name列不应包含所有这些字符。我如何动态地为未知数量的字符做这个?

谢谢

sql sql-server sql-server-2016
3个回答
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转换为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'

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


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);

0
投票

使用NOT LIKE“%[你的角色]%”的正则表达式

© www.soinside.com 2019 - 2024. All rights reserved.