结合 SQL Server 的“LIKE”和“IN”[重复]

Posted

技术标签:

【中文标题】结合 SQL Server 的“LIKE”和“IN”[重复]【英文标题】:Combining "LIKE" and "IN" for SQL Server [duplicate] 【发布时间】:2010-12-24 08:01:48 【问题描述】:

是否可以在 SQL Server 查询中组合 LIKEIN

所以,这个查询

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

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

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

等等……

【问题讨论】:

【参考方案1】:

你需要多个用 OR 连接的 LIKE 子句。

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

【讨论】:

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

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

【讨论】:

【参考方案3】:

不,您必须使用 OR 来组合您的 LIKE 语句:

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

你看过Full-Text Search吗?

【讨论】:

【参考方案4】:

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

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%'

【讨论】:

这是唯一可用的语法吗? 请注意:最后一个查询也适用于 oracle(11g) 我正在寻找类似的正则表达式示例,但现在就可以了! 您可以使用构建动态 SQL 语句,堆叠 OR。为提高安全性,应使用参数绑定***.com/questions/19943202/… 如果 IN 子句语句返回不定数量的值,则最后一个查询将不起作用。【参考方案5】:

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

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

【讨论】:

@astander:我就是这么想的。 这是最接近问题精神的,所以+1 是的,这就是我一直在寻找的答案,谢谢 这个解决方案的问题是如果文本列包含可以找到多个匹配项的文本。例如,如果您的文本是“Hello World”,它将找到两个匹配项并在结果中创建一个额外的行。第一行应该是SELECT DISTINCT t.* 以避免这种情况发生。 这比使用多个连接 OR 的 LIKE 条件更好、更快或更简单?【参考方案6】:

我知道这是旧的,但我有一种可行的解决方案

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

您可以使用 where 子句等进一步扩展它。 我之所以回答这个问题,是因为这是我一直在寻找的,而且我必须想办法做到这一点。

【讨论】:

优秀的解决方案,应该标记为答案。 @lloydz1 这不是最初的问题,尽管它有一列动态创建的值。您在两张桌子上执行此操作。 没有准确解决问题。这适用于另一个表中的标准列,而不是手动策划的单词列表。 如果 col1 匹配不同的类似值的条件,这可能会得到重复的结果 当然它回答了这个问题——你可以用一个表格做任何你可以用一个列表做的事情,但反之亦然,因此这是一般的解决方案

以上是关于结合 SQL Server 的“LIKE”和“IN”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Sql Server参数化查询之where in和like实现详解

SQL Server参数化SQL语句中的like和in查询的语法(C#)

SQL Server参数化SQL语句中的like和in查询的语法(C#)

SQL Server参数化SQL语句中的like和in查询的语法(C#)

Sql Server参数化查询之where in和like实现详解

Sql Server参数化查询之where in和like实现详解