如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 查询中同时使用 LIKE 和 NOT LIKE