结合 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 查询中组合 LIKE
和 IN
?
所以,这个查询
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#)