使用LOOP和Array进行SQL搜索

时间:2014-10-03 11:50:04

标签: c# sql linq

我想在表格中进行搜索,但不像你想的那样简单。

我有一个混合阵列(例如搜索键是'第二次世界大战'从这里我创建像这样的混合阵列'第二','第二世界' 39;,'第二次世界大战'第二次战争'等等)我想从中获得最佳匹配。我的想法是我通过一个循环遍历数组并比较两个单词caracters并将百分比结果放到一列而不是按计算的百分比排序结果。

我找到了一个计算百分比的函数,但是如何创建一个遍及数组并调用函数的查询?

很抱歉,但我在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'))

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

3 个答案:

答案 0 :(得分:1)

如果您要存储此阵列'在表格中(每个搜索词一个记录)然后你就可以这样做:

假设您将搜索字词列表存储在表格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与表格中的所有字词进行比较并返回匹配

答案 1 :(得分:0)

如果你想逐个“循环”记录,请使用CURSOR。在这里查看示例: http://technet.microsoft.com/pl-pl/library/ms180169(v=sql.110).aspx

答案 2 :(得分:0)

这是一种通用的方式来完成你所说的你想要实现的目标。

 select yourfields
 from yourtables
 where 1 = 2

 code to start your loop
 or somefield like '%SomeVariableDefinedInYourLoop%'
 code to stop your loop

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