我有一个表,其中有一个列Name
。用户可以指定一些字符,以便名称列不应包含所有这些字符。如何动态处理未知数量的字符?
谢谢
答案 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]%”的正则表达式