Sql server 如何在需要使用通配符的列中搜索多个值?

Sql server 如何在需要使用通配符的列中搜索多个值?,sql-server,select,Sql Server,Select,在SQLServer中,我需要在一列中搜索多个值,但我没有确切的值,因此我还需要使用通配符 我当前的查询如下所示: SELECT * FROM table WHERE fieldname in ( '%abc1234%', '%cde456%', '%efg8976%') 这不会返回任何结果,但是如果我搜索任何一个单独的值,我会找到它,所以我知道它们在那里。除了执行多个OR(有几百个值有点笨拙)之外,还有什

在SQLServer中,我需要在一列中搜索多个值,但我没有确切的值,因此我还需要使用通配符

我当前的查询如下所示:

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。它满足了我的需要。