如何在 SQL 列表中使用 like?

Posted

技术标签:

【中文标题】如何在 SQL 列表中使用 like?【英文标题】:How can I use like in a list for SQL? 【发布时间】:2014-03-07 22:09:20 【问题描述】:

我在表中有一个列,我想使用 like 进行搜索。例如

SELECT * from Employee
WHERE Employee.LName like ('%Mac%', '%Smi%', '%Wal%')

当我尝试这样做时,它不起作用。我希望能够做这样的事情,而不是像

SELECT * from Employee
WHERE Employee.LName like '%Mac%'
OR Employee.LName like '%Smi%'
OR Employee.LName like '%Wal%'

【问题讨论】:

您的潜在匹配列表是否任意长?是动态的吗?在您的“默认”解决方案或带有临时表的@Sparky 中,使用 PATINDEX 可能会更快。 匹配列表将被硬编码(并且随着时间的推移可能会添加一点点)。我从未听说过 PATINDEX。 一定要查找 PATINDEX(以及 CHARINDEX)。可以找到关于 LIKE 与 PATINDEX 的讨论***.com/questions/8052425。 【参考方案1】:

试试这个:

create table #lookfor (LikeName varchar(32))
insert into #lookfor values ('%Mac%'),('%Smi%'),('%wal%')


select * 
from employee emp 
join #lookfor lf on emp.LastName like lf.Likename
构建一个临时表来保存表达式。 使用 LIKE 运算符加入主表和#temp 表

【讨论】:

我工作真的很忙,所以还没有时间尝试这个,但我真的很喜欢这个解决方案的简单性。【参考方案2】:

我不知道这是否更容易,但这是一个选择 如果您需要模拟一个连接,那就太好了

  SELECT [docEnum1].[value]
    FROM [docEnum1]
    join ( values ('%new%'), ('%allen%'), ('%waste%')
         ) as [joinVals] (val)
      on [docEnum1].[value] like [joinVals].[val]

【讨论】:

与下面的答案并没有太大的不同,对吧? 你的意思是上面接受的解决方案?一个它不创建#temp 表?您真的认为具有更多代码和#temp 的解决方案更简单吗?如果 #lookfor 正在使用怎么办?

以上是关于如何在 SQL 列表中使用 like?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SLICK 中使用 SQL“LIKE”运算符

如何在 SQL Server 查询中同时使用 LIKE 和 NOT LIKE

如何在sql中使用like和join?

如何在 PL/SQL 的 LIKE 子句中使用变量

如何在带有 php 用户输入的 SQL 中使用 like 运算符? [复制]

Slick Postgres:如何使用 like 运算符在字符串列表中搜索