使用LOOP和Array的SQL搜索
本文关键字:SQL 搜索 Array LOOP 使用 | 更新日期: 2023-09-27 18:25:24
我想做一个在表中搜索的查询,但不像你想象的那么简单。
我有一个混合数组(例如,搜索关键字是"第二次世界大战",我由此创建了像"第二"、"第二世界大战"、"二战"、"战争第二"等的混合数组),我想从中获得最佳匹配。我的想法是,我通过循环遍历数组,比较两个单词的字符,并将百分比结果放在一列中,然后按照计算出的百分比对结果进行排序。
我找到了一个计算百分比的函数,但如何创建一个穿过数组并调用该函数的查询?
对不起,我在sql:/方面不够好
SELECT
P.FullName,
K.Shortname,
(P.VoteSumm / P.VoteCount) AS Rate,
[dbo].GetPercentageOfTwoStringMatching](P.FullName, CurrentName)
FROM [Test].[dbo].Table1 AS P
LEFT OUTER JOIN [Test].[dbo].Table2 AS UC ON UC.ID = P.UcID
LEFT OUTER JOIN [Test].[dbo].Table3 AS K ON K.ID = P.KarID
LEFT OUTER JOIN [Test].[dbo].Table4 AS PV ON PV.OwnerID= P.ID
WHERE
(P.Deleted IS NULL)
AND
(P.FullName LIKE '%kiss%'
OR P.FullName LIKE '%kisstamás%'
OR P.FullName LIKE '%tamás%')
OR
(P.Email IN ('kiss','kiss tamás','tamás')
OR UC.ShortName IN ('kiss','kiss tamás','tamás')
OR UC.Name IN ('kiss','kiss tamás','tamás')
OR K.ShortName IN ('kiss','kiss tamás','tamás')
OR K.Name IN ('kiss','kiss tamás','tamás'))
这是我的代码,但"当前名称"只是一个例子。我不知道该怎么做:/
如果要将这个"数组"存储在一个表中(每个搜索项一条记录),那么只需执行以下操作:
假设您将搜索项列表存储在表SearchTerm
的列Term
:中
SELECT P.FullName, T.Term
FROM [Test].[dbo].Table1 AS P
INNER JOIN
SearchTerm T
ON
(
P.FullName LIKE '%' + T.Term + '%'
OR
P.Email LIKE '%' + T.Term + '%'
)
WHERE P.Deleted IS NULL
这将把FullName
和Email
与表中的所有项进行比较,并返回匹配项
如果要逐个记录"循环",请使用CURSOR。请参阅此处的示例:http://technet.microsoft.com/pl-pl/library/ms180169(v=sql.110).aspx
这是一种实现您所说的目标的通用方法。
select yourfields
from yourtables
where 1 = 2
code to start your loop
or somefield like '%SomeVariableDefinedInYourLoop%'
code to stop your loop
详细信息取决于您是在应用程序级别还是在数据库级别编写代码。它们还依赖于数据库引擎和/或编程语言。