我想做一个查询,在一个表中搜索,但不像你想的那么简单。
我有一个混合数组(例如,搜索键是“第二次世界大战”,由此创建的混合数组类似于“第二次”、“第二次世界”、“第二次世界大战”、“第二次战争”等等)。我想从中得到最好的匹配。我的想法是,通过循环遍历数组,比较两个单词字符,并将百分比结果放到列中,而不是按计算出的百分比对结果排序。
我找到了一个计算参数的函数,但是如何创建一个查询,通过数组调用这个函数呢?
对不起,我在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'))这是我的代码,但“当前名称”只是一个例子。我不知道怎么做
发布于 2014-10-03 12:36:26
如果要将这个“数组”存储在一个表中(每个搜索项都有一个记录),那么只需这样做:
假设您将搜索词列表存储在表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与表中的所有术语,并返回匹配项。
发布于 2014-10-03 11:55:42
如果您想按记录“循环”记录,请使用游标。参见这里的一个示例:http://technet.microsoft.com/pl-pl/library/ms180169(v=sql.110).aspx
发布于 2014-10-03 12:06:49
这是一种通用的方法来做你说你想要达到的目标。
select yourfields
from yourtables
where 1 = 2
code to start your loop
or somefield like '%SomeVariableDefinedInYourLoop%'
code to stop your loop详细信息取决于您是在应用程序还是在数据库级别上编写代码。它们还依赖于数据库引擎和/或编程语言。
https://stackoverflow.com/questions/26178424
复制相似问题