【问题标题】:SQL Text comparison - dealing with multiple apostrophe typesSQL 文本比较 - 处理多种撇号类型
【发布时间】:2015-12-14 15:02:04
【问题描述】:

我正在尝试编写一些代码来搜索 varchar 字段并根据 SQL Server (2008+) 中的部分/完整输入匹配来匹配结果

我们正在搜索的列是 NVARCHAR 列,因此支持多种撇号和引号。这些包括但可能不限于:

  • “正常”撇号 - '
  • 右单引号 - '
  • 左单引号 - '

同样有各种双引号需要考虑...

用户可以输入任何单引号,我想返回包含该单个字符的任何变体的结果,对于双引号也是如此。

很像 _CI 排序规则会在搜索“e”时返回“e”或“E”的结果,而 _AI 排序规则会返回 à 或ä 搜索“a”时,是否存在忽略引号变体的排序规则?

目前的解决方法是:

WHERE my_field LIKE REPLACE( REPLACE( REPLACE( REPLACE( search_term, CHAR(145), CHAR(39)), CHAR(146), CHAR(39)), CHAR(147), CHAR(34)), CHAR(148), CHAR(34))

(不可扩展且难以阅读)

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    标准做法是创建可搜索数据的“规范化”版本,删除复数形式并规范化或删除标点符号。

    SQL Server 通过其“全文搜索”功能提供此搜索功能和其他搜索功能。使用FTS需要设置并启用,默认不启用。

    如果您不需要 FTS 的所有功能,也可以自行开发。根据您的要求,这可能值得,也可能不值得。

    【讨论】:

    • 谢谢 - 我们可能会更进一步(最终)并在应用服务器上创建一个 Lucene 搜索。我希望在此期间快速修复!我将调查 FTS 的潜在缺点(例如,它会影响写入时间吗?)并考虑这一点。
    猜你喜欢
    • 2019-09-28
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 2015-07-04
    • 2022-09-23
    • 2015-06-11
    • 1970-01-01
    相关资源
    最近更新 更多