SQL 服务器:在单引号内搜索

SQL Server : search inside single quote

我在 SQL 服务器中有 Table1 是这样的:

ID | Name
---+--------------
1  | Robert Bart
2  | Andy Wor
3  | Sam O'Neil
4  | Bill Neil

全文已启用,我的 T-SQL 看起来像这样:

SELECT *
FROM Table1
WHERE CONTAINS([Name], @Keywords)

参数@Keywords的类型为NVARCHAR(MAX)

我的问题是,当 @Keyword 是 Neil 时,我只得到记录 #4 作为结果;有没有办法从 select 将 Neil 作为 @Keywords 传递给记录 #3 和 #4?

我正在使用 MS SQL Server 2017。

您将很难自定义 Microsoft 的 FTS。
分词器随 SQL 服务器的每个版本而变化,并取决于您用于创建全文索引的语言。
您也许可以找到将 O'Neil 拆分为 O + Neil 的默认语言,但我不会指望它。
有关设置语言环境标识符的更多信息:CREATE FULLTEXT INDEX with a LCID

如果您真的想自定义分词系统,您有 2 个选择:

  1. Create a custom dictionary
  2. Write a Language Resource DLL

最简单的解决方法是在将名称插入到 Table1 之前用引号等分隔符拆分名称,例如 REPLACE(Name, '''', ' ')
如果您需要原始全名,只需将其存储在不同的 column/table.

如果有人需要,我已经找到了解决方法;我在 table Table1.Name 列上设置了我的全文索引,分词器的语言设置为法语而不是英语。 这将在没有 O'

的名称中搜索