使用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'))

这是我的代码,但"当前名称"只是一个例子。我不知道该怎么做:/

使用LOOP和Array的SQL搜索

如果要将这个"数组"存储在一个表中(每个搜索项一条记录),那么只需执行以下操作:

假设您将搜索项列表存储在表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

这将把FullNameEmail与表中的所有项进行比较,并返回匹配项

如果要逐个记录"循环",请使用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

详细信息取决于您是在应用程序级别还是在数据库级别编写代码。它们还依赖于数据库引擎和/或编程语言。