如何在包含的列中搜索多个值?

  • 本文关键字:搜索 包含 sql sql-server
  • 更新时间 :
  • 英文 :


我有一个搜索项列表:

DROP TABLE IF EXISTS #searchitems
SELECT 'Road' as  item
INTO #searchitems
UNION 
SELECT 'Bike'
<表类>项目tbody><<tr>道路自行车

参考文档https://learn.microsoft.com/fr-fr/sql/t-sql/queries/contains-transact-sql?view=sql-server-ver16

SELECT distinct Name
FROM [AdventureWorksLT2019].[SalesLT].[Product]
WHERE CONTAINS(*, 'Road OR Bike' )

Is working,官方示例:

SELECT Name  
FROM Production.Product  
WHERE CONTAINS(Name, ' Mountain OR Road ')  

也许这就是你的解决方案:

SELECT Name
FROM [AdventureWorksLT2019].[SalesLT].[Product]
WHERE CONTAINS(*, (Select STRING_AGG(item, ' OR ') FROM #searchitems) 

一种方法是使用CTEJOIN它与LIKE:

WITH searchitems AS
(SELECT 'Road' AS item
UNION ALL
SELECT 'Bike')
SELECT DISTINCT y.name
FROM yourtable y
JOIN searchitems s
ON y.name LIKE CONCAT('%',s.item,'%');

CTE中,您可以根据需要选择尽可能多的项目。

您通常应该注意,如果您的表包含非常多的条目,那么大量的LIKE条件可能会减慢您的查询速度(当然,类似CONTAINS的想法也可能非常慢)。

如果可能的话,应该避免这种情况,并将其替换为精确的字符串搜索,以缩短执行时间。

当然,上面所示的方式不再需要,您可以使用标准的IN子句:
SELECT name
FROM yourtable
WHERE 
name IN ('Road','Bike','Hello World','Another Text');

尝试使用一些示例数据:db<>fiddle

相关内容

  • 没有找到相关文章

最新更新