我使用下面的SQL查询在数据库中进行动态搜索:
SELECT [Name],[Vendor]
FROM OrderedApps
Where Name like '%' + 'Microsoft Visio' + '%' OR [Vendor] like '%' + 'Microsoft Visio' + '%'在数据库中,我有:
Name Vendor
Visio Viewer Microsoft
Office Visio Microsoft
Office test Microsoft如果我提供输入Microsoft Visio
我想把它列出来
Name Vendor
Visio Viewer Microsoft
Office Visio Microsoft我如何改进我的SQL查询来实现这一点?我已经搜索过了,但还没有找到我想要做的事情。
发布于 2021-02-03 20:42:04
要么将参数作为表值参数传递,要么作为单词列表传递。
或者在SQL中将其拆分:
DECLARE @words TABLE (word varchar(100) PRIMARY KEY);
INSERT @words (word)
SELECT value
FROM STRING_SPLIT(@myparam, ' ');然后,您可以取消旋转您的列以进行搜索,并像这样连接它:
SELECT [Name],[Vendor]
FROM OrderedApps oa
WHERE EXISTS (
SELECT 1
FROM @words w
LEFT JOIN (VALUES
(oa.Name),
(oa.Vendor)
) v (col)
ON v.col LIKE '%' + w.word + '%'
HAVING COUNT(CASE WHEN v.col IS NULL THEN 1 END) = 0 -- this line ensures that every word matches at least once
);如果你只想要单词列表中的任何匹配,这要容易得多:
WHERE EXISTS (
SELECT 1
FROM @words w
JOIN (VALUES
(oa.Name),
(oa.Vendor)
) v (col)
ON v.col LIKE '%' + w.word + '%'
);https://stackoverflow.com/questions/66027377
复制相似问题