SQL 查询按最接近的匹配排序

2024-04-09

我们有一个位置搜索页面,这给我们带来了我以前从未遇到过的挑战。

在我们的数据库中,我们有一个城市、州等的列表以及相应的地理编码。到目前为止一切都很有趣......

我们在名为“威斯康星州 Black River Falls”的城市设有两家分店,最近又在“威斯康星州 River Falls”开设了一家分店。

所以我们的表有记录如下:

Location    City                State
-------------------------------------
1           Black River Falls   WI
2           Black River Falls   WI
3           River Falls         WI

显然我们的查询使用了“LIKE”子句来匹配城市,但是当客户搜索文本“River Falls”时,在搜索结果中显示的第一个结果始终是“Black River Falls”。

在我们的应用程序中,我们始终使用第一个匹配项,并将其用作默认值。 (我们可以改变它,但这将是大量未预算的工作)

我知道我可以简单地更改排序顺序,让“River Falls”首先出现,但这是一个草率的解决方案,仅适用于这种情况。

我想知道是否有一种方法,通过 T-SQL (SQL Server 2008r2) 按“最佳匹配”排序,如果我们搜索“River Falls,WI”和“Black”,“River Falls”将“获胜”如果我们搜索威斯康星州“Black River Falls”,“River Falls”就会起作用。


您可以使用“不同之处 http://technet.microsoft.com/en-us/library/ms188753.aspx“使用最近的搜索功能SOUNDEX http://technet.microsoft.com/en-us/library/ms187384.aspx match.

Select * From Locations WHERE City=@City ORDER BY Difference(City, @City) DESC

来自 MSDN 文档:

返回的整数是 SOUNDEX 值中的字符数 是一样的。返回值范围从0到4:0 表示弱相似性或无相似性,4 表示强相似性或 相同的价值观。

DIFFERENCE 和 SOUNDEX 对排序规则敏感。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL 查询按最接近的匹配排序 的相关文章

  • 使用触发器找出哪些行被插入、更新或删除

    我在数据库中有一个名为指示的表 它有三列Name Age and Enable 我想创建一个触发器 每当Age未满 18 岁并且Enable是真的 我想在插入的那一刻检查指示表上的记录 这样我就可以检查是否应该在报警时插入 I found
  • 计算日期范围内的天数以及可能重叠的排除集

    给定以下示例查询 考虑到这些范围可能具有重叠的日期 并且还给出了一组要排除的范围 那么计算日期范围内的总天数的合理且高效的方法是什么 更简单地说 我有一个表 其中包含一组关闭计费的日期范围 我从一个日期范围 例如 Jan1 Jan31 开始
  • 范围身份与当前身份

    经过大量研究后 我对应该在 sql 中使用哪个身份跟踪器有点困惑 据我了解 scope identity 将为我提供从任何表更新的最后一个 id 而 ident current 将返回指定表中的最后一个 id 因此 考虑到这些信息 在我看来
  • SQL链接服务器查询非常非常慢

    我正在通过链接服务器从视图中提取大量数据 我使用的是 SQL Server 2012 链接服务器是 SQL Server 2008 我的选择语句是 SELECT INTO MY LOCAL TABLE FROM SELECT FROM LI
  • 如何遍历与自身有关系的表?

    我有一个如下表 Node Id Node Name Parent Node Id 1 Root 0 2 Node1 1 3 Node2 1 4 Node3 2 5 Node4 2 6 Node5 5 7 Node6 5 8 Node7 7
  • 如何将 Byte[] 转换为数据以在 SQL Server 中的 varbinary(max) 列中插入值?

    我有一个对象byte 属性 我想将此值转换为正确的值 以便可以使用 T SQL 将其插入数据库 但我不知道如何转换byte 为 T SQL 插入的正确值 Thanks 创建一个控制台应用程序项目并尝试此代码 Sample Class pub
  • 如何使用 SQL 获取数据库中所有表的列表?

    获取 SQL Server 上特定数据库中所有表的名称的最佳方法是什么 SQL Server 2000 2005 2008 2012 2014 2016 2017 或 2019 SELECT FROM INFORMATION SCHEMA
  • IF EXISTS (SELECT 1...) 与 IF EXISTS (SELECT TOP 1 1...)

    这是一个纯粹的学术问题 这两个陈述实际上是相同的吗 IF EXISTS SELECT TOP 1 1 FROM Table1 SELECT 1 ELSE SELECT 0 Versus IF EXISTS SELECT 1 FROM Tab
  • 即使没有显式事务,SQL Server 也会获取锁吗?

    我第一次阅读有关 MSSQL 锁定的内容 在很多地方 锁定机制概念依赖于事务的存在 我想知道在不涉及任何事务的情况下是否可以锁定 一般来说 当不存在显式事务时 每个 SQL 语句都在自动 自动提交 事务中执行 在这种情况下将应用正常的锁定行
  • SQL - 我需要将总值划分为另一个表中的多行

    假设我在 SQL Server 2008 中有以下表 学校桌 School Id Course Id Total Students 1 Acct101 150 1 Acct102 100 2 Acct101 110 2 Acct102 13
  • 从日期时间中获取时间并将其转换为秒?

    我正在运行 SQL Server 2005 从技术上讲 我知道如何从 tsql 日期时间中获取时间 CONVERT VARCHAR 8 GETDATE 108 AS HourMinuteSecond 问题是我有一个日期时间字段 我需要本质上
  • sql 错误不会返回给调用者

    我是这个论坛的新手 但请耐心等待 我有一个 C Windows 窗体 上面有两个复选框 一个称为 chkThrowError 另一个称为 chkDivideError 两者都是未检查的 这些控件纯粹是为了控制存储过程的执行 我有一个带有以下
  • T-SQL:如何使用 SELECT 创建表?

    在 oracle 中 您可以发出 create table foo as select from bar 等效的 T SQL 语句是什么 您可以使用SELECT INTO http msdn microsoft com en us libr
  • 正则表达式 '?' 的类似物(前一项可选)在T-SQL中像什么?

    我想知道 是否可以翻译包含 的正则表达式 前面的项目可选 在 T SQL LIKE 模式中 DB 端无需任何操作 例如 31 4 我可以将其分成几个子句 但如果正则表达式包含很多 这不太方便 LIKE不使用正则表达式 并且它使用的模式语言没
  • 拆分列中的字符串并在列中添加值

    我有一个包含几行数据的表 如下所示 16 W 2 Work ALBO 00 Proposal ALxO Amendement 1 20091022 signed pdf 17 W 2 Work ALBO 00 Proposal Level1
  • 选择具有 SQL Server XML 列类型的特定行

    我正在尝试从类似于以下定义的表中选择数据 Column Data Type Id Int DataType Int LoggedData XML 但我只想选择具有特定 DataType 值并且在 LoggedData 列中包含字符串 或评估
  • 重命名重复行

    这是我的问题的一个简化示例 我有一个表 其中有一个包含重复条目的 名称 列 ID Name 1 AAA 2 AAA 3 AAA 4 BBB 5 CCC 6 CCC 7 DDD 8 DDD 9 DDD 10 DDD 进行 GROUP BY 操
  • 从 SQLCMD 执行 CREATE VIEW 和 ALTER VIEW

    我正在尝试使用 sql cmd 执行包含以下内容的 sql 文件 sqlcmd S localhost dbInstance i Sample sql v filepath C Sql 示例 sql内容 根据手册 CREATE VIEW 必
  • 读取 BCP 格式文件时发生 I/O 错误

    今天 我创建了一个新的临时表和一个 BCP fmt 文件 我创建了一些测试数据并尝试从命令行运行 BCP 实用程序 我从之前的工作中获得了大约 20 个不同格式的文件和暂存表 这是我第一次遇到此错误 我该如何修复这个错误 请注意 我在下面添
  • 解析带下划线的 SQL Server 数字文字

    我想知道它为什么有效以及为什么它不返回错误 SELECT 2015 11 Result 11 2015 第二种情况 SELECT 2 1 a a 2 1 检查元数据 SELECT name system type name FROM sys

随机推荐