【发布时间】:2019-04-20 20:15:18
【问题描述】:
我有一个表,它有一个列Name。用户可以指定一些字符,以便名称列不应包含所有这些字符。如何为未知数量的字符动态执行此操作?
谢谢
【问题讨论】:
标签: sql sql-server sql-server-2016
我有一个表,它有一个列Name。用户可以指定一些字符,以便名称列不应包含所有这些字符。如何为未知数量的字符动态执行此操作?
谢谢
【问题讨论】:
标签: sql sql-server sql-server-2016
试试这个:
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 "%[your charecter]%" 的正则表达式
【讨论】:
a,b,c我想选择NOT LIKE N'%a%' and NOT LIKE N'%b%' and NOT LIKE N'%c%'的名字
WHERE colName not IN (''A","B", "C", ... )