结合SQL Server的"LIKE"和"IN"

F.P*_*F.P 229 sql sql-like

是否有可能结合起来LIKE,并IN在SQL Server的查询?

那么,这个查询

SELECT * FROM table WHERE column LIKE IN ('Text%', 'Link%', 'Hello%', '%World%')
Run Code Online (Sandbox Code Playgroud)

查找以下任何可能的匹配项:

Text, Textasd, Text hello, Link2, Linkomg, HelloWorld, ThatWorldBusiness
Run Code Online (Sandbox Code Playgroud)

等等...

Fen*_*ton 253

实际上,IN语句创建了一系列OR语句......所以

SELECT * FROM table WHERE column IN (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

是有效的

SELECT * FROM table WHERE column = 1 OR column = 2 OR column = 3
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这是你用LIKE语句必须采取的路线

SELECT * FROM table
WHERE column LIKE 'Text%' OR column LIKE 'Hello%' OR column LIKE 'That%'
Run Code Online (Sandbox Code Playgroud)

  • 这是唯一可用的语法吗? (2认同)

小智 202

我知道这已经过时了,但我得到了一种有效的解决方案

SELECT Tbla.* FROM Tbla
INNER JOIN Tblb ON
Tblb.col1 Like '%'+Tbla.Col2+'%'
Run Code Online (Sandbox Code Playgroud)

您可以使用where子句等进一步扩展它.我只回答了这个问题,因为这是我正在寻找的东西,我必须找到一种方法.

  • 优秀的解决方案,这应该标记为答案. (14认同)
  • 没有准确地解决这个问题.这适用于另一个表中的标准列,而不是手动策划的单词列表. (11认同)
  • @ lloydz1这不是原始问题,虽然它有一列动态创建的值.你在两张桌子上这样做. (9认同)
  • 当然,它回答了这个问题-您可以使用表格来做列表可以做的所有事情,反之亦然,因此这是一般的解决方案 (4认同)
  • 如果col1匹配不同的类似值的条件,则可以得到重复的结果 (2认同)
  • 我同意@GerasimosR。使用带列表(`SELECT * FROM VALUE('%patern1%',pat%ern%2')AS TableAlias(Col1)`)而不是表的内联表语句很简单。 (2认同)

Adr*_*der 107

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

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
Run Code Online (Sandbox Code Playgroud)

  • 这是最接近问题精神的,所以+1 (11认同)
  • 此解决方案的问题是文本列是否包含可以找到多个匹配项的文本.例如,如果您的文本是"Hello World",它将找到两个匹配项并在结果中创建一个额外的行.第一行应该是`SELECT DISTINCT t.*`以避免这种情况发生. (11认同)
  • 与使用 OR 连接的多个 LIKE 条件相比,这如何更好、更快或更简单? (4认同)

Mit*_*eat 9

不,您将不得不OR用来组合您的LIKE陈述:

SELECT 
   * 
FROM 
   table
WHERE 
   column LIKE 'Text%' OR 
   column LIKE 'Link%' OR 
   column LIKE 'Hello%' OR
   column LIKE '%World%'
Run Code Online (Sandbox Code Playgroud)

你看过全文搜索吗?


Eri*_* J. 8

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

SELECT * FROM table WHERE 
column LIKE 'Text%' OR 
column LIKE 'Link%' OR 
column LIKE 'Hello%' OR 
column LIKE '%World%' OR 
Run Code Online (Sandbox Code Playgroud)

  • NOOOOOOO.如果有几十种可能的价值怎么办?它是可怕的... (7认同)
  • 这就是命?问题是关于 MS SQL 是否支持该语法。它不是。如果不真正了解手头的问题,就很难推测出更好的解决方案。正如米奇指出的那样,全文搜索可能是一种选择。也可能需要编写一个存储过程(例如在 C# 中,它具有更高级的文本处理能力)。 (7认同)

And*_*gin 5

不,MSSQL不允许此类查询。您应该使用col LIKE '...' OR col LIKE '...'