我已经设置的,我需要用标准来搜索记录。 但标准将返回我多行。
所以,我需要顶2条记录,其是具有标准匹配的最大百分比。
我曾在模糊逻辑却发现它是如此简单的问题太复杂。 我有一个像下面的情况:
SELECT DISTINCT FirstName, LastName, CountryName, StateName FROM Employee
例如说,上面一个是我返回5个记录。
我要的是喜欢用“喜欢”的运营商直通,我可以找到Statename的LIKE“%古吉拉特邦%”&COUNTRYNAME像上述五个记录'%印度%的配套率。
一旦我得到这个匹配百分比,我将选择匹配百分比最高金额最高2条记录。
这将导致我得到几分准确的数据。
使用SQL Server的任何想法?
据我了解,你需要像使用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
你可以使用全文搜索。 使用CONTAINSTABLE你可以描述它是如何适应WEEL搜索模式每条记录等级。 然后,你可以命令你的结果通过职级,然后使用select top N
只拿到最好的N个结果。
实现全文搜索是方便,快捷,特别是如果你需要简单的查询,如你的。
资源:
- 实现全文搜索和基本用法 。
- 一个系列的第三部分 ,专注于与排序的查询
containstable
和freetexttable
。 - CONTAINSTABLE参考 。 你还可以找到很多信息关于这个在这里计算器。
希望能帮助到你。
鉴于我没有工作的解决方案,
所以,我创建了自己的逻辑:
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?