sql - 在 SQL 中匹配相似的城市名称

标签 sql sql-server select

我有一个包含城市名称的表“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/

相关文章:

sql - 将表名作为参数传递时如何检查表是否包含任何行?

sql - R-从R数据帧在sql server中创建临时表

mysql select count 多个条件

sql - 循环运行大型 oracle SQL 脚本

MYSQL 查询连接表

sql - 有没有办法同时选择和更新行?

c# - 为什么我得到 "String or binary data would be truncated"作为错误?

sql-server - sql server 多列索引查询

sql - 如何获取 Sqlite3 数据库中的列名列表?

sql - 使用SQL 'like'子句在Oracle数据库中搜索换行符