Sql server 如何在需要使用通配符的列中搜索多个值?
在SQLServer中,我需要在一列中搜索多个值,但我没有确切的值,因此我还需要使用通配符 我当前的查询如下所示:Sql server 如何在需要使用通配符的列中搜索多个值?,sql-server,select,Sql Server,Select,在SQLServer中,我需要在一列中搜索多个值,但我没有确切的值,因此我还需要使用通配符 我当前的查询如下所示: SELECT * FROM table WHERE fieldname in ( '%abc1234%', '%cde456%', '%efg8976%') 这不会返回任何结果,但是如果我搜索任何一个单独的值,我会找到它,所以我知道它们在那里。除了执行多个OR(有几百个值有点笨拙)之外,还有什
SELECT *
FROM table
WHERE fieldname in ( '%abc1234%',
'%cde456%',
'%efg8976%')
这不会返回任何结果,但是如果我搜索任何一个单独的值,我会找到它,所以我知道它们在那里。除了执行多个OR(有几百个值有点笨拙)之外,还有什么方法可以做到这一点吗
我还想知道为什么这个查询不起作用,因为没有%的同一个查询可以很好地工作(除了只捕获几个精确匹配的小问题)。看看使用一个。这将使您的搜索工作做得更好,并使您的“或”问题更易于引导:
SELECT *
FROM table
WHERE CONTAINS(fieldname, '"abc1234" OR "cde456" OR "efg8976"')
另见:
查询不起作用的原因是,它在参数中的值列表中查找
字段名
的精确匹配项。在考虑通配符的情况下,它不会像那样进行比较
因此,您的查询相当于:
SELECT * from table
where fieldname = '%abc1234%' OR
fieldname = '%cde456%' OR
fieldname = '%efg8976%'
显然不是你想要的
select table.* from (
table join ( select * from values
( ('%abc1234%'), ('%cde456%'), ('%efg8976%') )
)
as search( exp ) on 0 = 0
) where fieldname like exp
或许
select table.* from
table join
( select * from values (
( '%abc1234%' ), ( '%cde456%' ), ( '%efg8976%' )
) as search( exp )
on fieldname like exp
我肯定是对一些语法进行模化
关键是,这几乎允许值列表成为唯一的参数。它不起作用,因为
中的使用=
运算符,而通配符只与类似的运算符一起工作。重复的和(除其他外)啊,我现在明白了。Judge Mental的第二个链接有一个很好的答案,解释了为什么它不起作用。少了一个误解,我会成为牺牲品!我不认为有什么方法可以避免以某种形式列举“几百个值”。谢谢。我想,如果我必须用更多的值再次这样做,我将研究索引。在本例中,我查看了我拥有的值的数量,认为在晚上的这个时候,这还不足以引起麻烦,于是做了一系列类似的陈述,并加入了OR。它满足了我的需要。