2009-12-08 155 views
139

是否可以将LIKEIN结合到SQL Server-Query中?为SQL Server结合“LIKE”和“IN”

所以,这个查询

SELECT * FROM table WHERE column LIKE IN ('Text%', 'Link%', 'Hello%', '%World%') 

发现任何这些可能的匹配:

Text, Textasd, Text hello, Link2, Linkomg, HelloWorld, ThatWorldBusiness 

等等

+0

现在我该如何添加答案? – Cloud 2017-10-23 09:31:00

+0

@云如果你有新的输入,你可以回答[链接的问题](https://stackoverflow.com/questions/3014940/is-there-a-combination-of-like-and-in-in-sql)。这一个是重复的。 – 2017-10-23 11:20:59

回答

156

实际上,在IN语句创建一个系列或声明......所以

SELECT * FROM table WHERE column IN (1, 2, 3) 

实际上是

SELECT * FROM table WHERE column = 1 OR column = 2 OR column = 3 

可悲的是,这是你必须采取与您的路线LIKE语句

SELECT * FROM table 
WHERE column LIKE 'Text%' OR column LIKE 'Hello%' OR column LIKE 'That%' 
+0

这是唯一可用的语法吗? – shaffooo 2015-04-05 15:38:19

+0

只是一个说明:最后的查询也适用于oracle(11g) – Abrar 2016-02-02 15:51:17

+0

我正在寻找类似的正则表达式的例子,但这会做现在! – 2016-03-24 09:29:37

5

您需要通过OR连接的多个LIKE子句。

SELECT * FROM table WHERE 
column LIKE 'Text%' OR 
column LIKE 'Link%' OR 
column LIKE 'Hello%' OR 
column LIKE '%World%' OR 
+5

NOOOOOOO。如果有几十个可能的值呢?这很可怕... – Faruz 2009-12-08 07:54:55

+0

这就是生活?问题是关于MS SQL是否支持该语法。它不是。如果没有真正意识到问题的存在,就很难推测更好的解决方案。 Mitch指出,全文检索可能是一种选择。编写存储过程也是可取的(例如在C#中,它具有更高级的文本处理能力)。 – 2009-12-08 08:00:15

1

不,MSSQL不允许这样的查询。您应该使用col LIKE '...' OR col LIKE '...'

4

不,你将不得不使用ORLIKE语句组合:

SELECT 
    * 
FROM 
    table 
WHERE 
    column LIKE 'Text%' OR 
    column LIKE 'Link%' OR 
    column LIKE 'Hello%' OR 
    column LIKE '%World%' 

你看着Full-Text Search

85

另一种选择是使用类似这样的东西

SELECT * 
FROM table t INNER JOIN 
     (
      SELECT 'Text%' Col 
      UNION SELECT 'Link%' 
      UNION SELECT 'Hello%' 
      UNION SELECT '%World%' 
     ) List ON t.COLUMN LIKE List.Col 
+0

@astander:这就是我想到的。 – shahkalpesh 2009-12-08 08:11:17

+8

这是最接近问题的精神,所以+1 – 2014-04-22 13:05:37

+0

是的这是我正在寻找的答案 谢谢 – 2015-05-29 17:05:54

123

我知道这是旧的,但我走了样的工作液

SELECT Tbla.* FROM Tbla 
INNER JOIN Tblb ON 
Tblb.col1 Like '%'+Tbla.Col2+'%' 

的您可以与您的where子句等进一步展开 我只回答事业,这是什么一直在寻找,不得不找出一种做法

+8

优秀的解决方案,这应该被标记为答案。 – 2015-03-13 15:23:27

+6

@ lloydz1这不是原来的问题,尽管它有一列动态创建的值。你在两张桌子上做这个。 – Riz 2015-12-16 18:06:01

+0

太棒了! thx::) – 2016-01-28 11:36:14