我有一个包含城市名称的表“City”,还有一个我刚刚创建的包含来自不同来源的城市的表。当我运行查询以匹配两个表之间的城市时,我发现大约 5000 个不匹配。
所以请提供一些我可以用来匹配城市的查询(因为有时用户输入的城市名称有一个或两个不同的字符)...我创建了一个工作正常的查询,但我需要这样的查询来匹配更多.
请建议我在这种情况下该怎么做。
SELECT distinct hsm.countryname,co.countryname,hsm.city,co.city
FROM HotelSourceMap AS hsm
INNER JOIN
( SELECT c.*,cu.countryName
FROM city c
INNER JOIN country cu ON c.countryid= cu.countryId
) co
ON (charindex(co.city,hsm.city) > 0 AND hsm.countryid = co.countryid) AND
hsm.cityid is null
最佳答案
如果您实现 Levenshtein Distance algorithm 作为用户定义的函数,它将返回需要对 string_1 执行的操作数,使其成为 string_2。然后,您可以将 Levenshtein Distance 函数的结果与固定阈值或 string_1 或 string_2 的百分比长度进行比较。
您只需按如下方式使用它:
WHERE LD(city_1, city_2) < 4;
使用 Full-Text Search可能是另一种选择,特别是因为 Levenshtein Distance 的实现需要全表扫描。该决定可能取决于您打算多久进行一次这种比较。
您可能想查看以下针对 SQL Server 的 Levenshtein Distance 实现:
关于sql - 在 SQL 中匹配相似的城市名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2026970/