2

我有一组需要使用条件搜索的记录。但是条件返回给我多行。

因此,我需要具有最大标准匹配百分比的前 2 条记录。

我研究过模糊逻辑,但发现对于这样简单的问题来说它太复杂了。我有如下场景:

SELECT DISTINCT FirstName, LastName, CountryName, StateName FROM Employee

比如说上面一个是返回我 5 条记录。

我想要的是使用“like”运算符,通过它我可以找到像 '%Gujarat%' 这样的州名和像 '%India%' 这样的国家名称与以上五个记录的匹配百分比。

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

这将使我得到一些准确的数据。

使用 sql server 有什么想法吗?

4

3 回答 3

2

据我了解,您需要使用 Levenshtein Distance Algorithm 进行模糊字符串匹配之类的东西。希望链接会有所帮助。

您需要计算 CountryName 和搜索模式之间的距离。它不完全是“百分比”,但它可以衡量相关性。

也许这可以解决您的问题?

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
于 2012-04-10T14:03:30.857 回答
0

您可以使用全文搜索。使用 ContainsTable,您可以获得每条记录的 RANK,描述它与搜索模式的匹配程度。然后您可以按该排名对您的结果进行排序,然后使用select top N它来仅获得最好的 N 个结果。

实现全文搜索既简单又快速,特别是如果您需要像您这样的简单查询。

资源:

希望能帮助到你。

于 2012-04-10T14:45:18.863 回答
0

鉴于解决方案对我不起作用,

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

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

希望这有助于...

于 2013-10-18T15:46:50.033 回答