如何选择记录,其匹配比例高于其他使用像在SQL Server操作?(how to select re

2019-06-23 12:29发布

我已经设置的,我需要用标准来搜索记录。 但标准将返回我多行。

所以,我需要顶2条记录,其是具有标准匹配的最大百分比。

我曾在模糊逻辑却发现它是如此简单的问题太复杂。 我有一个像下面的情况:

SELECT DISTINCT FirstName, LastName, CountryName, StateName FROM Employee

例如说,上面一个是我返回5个记录。

我要的是喜欢用“喜欢”的运营商直通,我可以找到Statename的LIKE“%古吉拉特邦%”&COUNTRYNAME像上述五个记录'%印度%的配套率。

一旦我得到这个匹配百分比,我将选择匹配百分比最高金额最高2条记录。

这将导致我得到几分准确的数据。

使用SQL Server的任何想法?

Answer 1:

据我了解,你需要像使用Levenshtein距离算法的模糊串匹配 。 希望该链接会有所帮助。

你需要国家或地区名称和搜索模式之间来计算距离。 这不正是“百分比”,但它可以测量的相关性。

也许这可以解决问题了吗?

SELECT TOP 2 FirstName, LastName, CountryName, StateName 
FROM Employee
WHERE
    statename like '%Gujarat%' AND countryname like '%India%'
ORDER BY
    dbo.edit_distance(statename, 'Gujarat') + dbo.edit_distance(CountryName, 'India') DESC


Answer 2:

你可以使用全文搜索。 使用CONTAINSTABLE你可以描述它是如何适应WEEL搜索模式每条记录等级。 然后,你可以命令你的结果通过职级,然后使用select top N只拿到最好的N个结果。

实现全文搜索是方便,快捷,特别是如果你需要简单的查询,如你的。

资源:

  • 实现全文搜索和基本用法 。
  • 一个系列的第三部分 ,专注于与排序的查询containstablefreetexttable
  • CONTAINSTABLE参考 。 你还可以找到很多信息关于这个在这里计算器。

希望能帮助到你。



Answer 3:

鉴于我没有工作的解决方案,

所以,我创建了自己的逻辑:

SELECT TOP 2 FirstName, LastName, CountryName, StateName 
FROM Employee
WHERE
    statename like '%Gujarat%' AND countryname like '%India%'
ORDER BY
    LEN(StateName + CountryName) - LEN(REPLACE(StateName, 'Gujarat', '') + REPLACE(CountryName, 'India', '')) DESC

希望这有助于...



文章来源: how to select record whose matching percentage is higher than other using like operator in sql server?