在T-SQL中具有可变数量的搜索条件的LIKE运算符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在T-SQL中具有可变数量的搜索条件的LIKE运算符相关的知识,希望对你有一定的参考价值。
有没有使用AND子句查找LIKE运算符的多个匹配的简短方法?
我应该用可变数量的术语动态地完成它。静态获取它(具有固定数量的术语)是明智的:
SELECT *
from MyTable
WHERE MyColumn LIKE "%AAA%"
AND MyColumn LIKE "%BBB%"
AND MyColumn LIKE "%CCC%"
假设有一个表变量包含未知数量的术语:
DECLARE @Terms table
(
Term nvarchar(500)
)
有没有办法在MyColumn上执行匹配@Terms中所有项目的LIKE语句?
答案
select mt.*
from MyTable mt
join @Terms t
on mt.MyColumn like '%' + t.Term + '%'
group by mt.MyColumn
having COUNT(*) = (select COUNT(*) from @Terms)
另一答案
DECLARE @Terms TABLE
(
WildCards VARCHAR(20)
)
INSERT INTO @Terms
( WildCards )
VALUES
( 'CO' ),
( 'DO' ),
( 'EO' )
DECLARE @FoundAll INT
SELECT @FoundAll = Count(*) FROM @Terms
SELECT mt.MyColumn, COUNT(*), @FoundAll FROM MyTable mt
OUTER APPLY
(
SELECT WildCards FROM @Terms
) d
WHERE mt.MyColumn LIKE ('%' + d.WildCards + '%')
GROUP BY mt.MyColumn
HAVING COUNT(*) = @FoundAll
这只会拉出与所有可能的喜欢相匹配的记录。
另一答案
如果你可以逃避不使用LIKE
,那么以下将起作用:
SELECT *
FROM MyTable
WHERE MyColumn IN
(
SELECT Term
FROM Terms
)
或者,以下(SQL Fiddle)如何:
SELECT *
FROM MyTable
INNER JOIN Terms
ON MyTable.MyColumn LIKE '%' + Terms.Term + '%'
另一答案
试试这个:
SELECT MT.*
FROM MyTable AS MT INNER JOIN
@Terms AS TR ON CHARINDEX(TR.Term, MT.MyColumn) > 0
GROUP BY MT.MyColumn
HAVING COUNT(*) = (SELECT COUNT(*) FROM Terms)
以上是关于在T-SQL中具有可变数量的搜索条件的LIKE运算符的主要内容,如果未能解决你的问题,请参考以下文章
T-SQL 转义select …. like中的特殊字符(百分号)