繁体   English   中英

T-SQL包含SQL Server 2008 R2上的搜索和德语变音

[英]T-SQL Contains Search and German Umlaut on SQL Server 2008 R2

我在SQL Server 2008 R2上面临一个问题,我必须使用包含搜索而忽略德语Umlaute-Letters(ä,ö,ü)。

对于所有非德语的开发人员:德语变音字母可以表示为常规基础字母(使用ä时)和e。 所以穆勒和穆勒一样,巴克尔和巴克尔一样。

我们想要做的是:当搜索“Müller”时,我们希望找到包含“Mueller”和“Müller”的数据,当输入“Mueller”时,我们希望找到包含“Müller”以及“穆勒”。

使用like或=比较数据时,只需附加COLLATE German_PhoneBook_CI_AI即可。 当使用包含全文索引的搜索时,这并不容易。 您可以将重音敏感度设置为关闭,但是包含搜索将ü-字母视为u,ä-字母像a和ö字母一样o,它不会找到包含oe的条目而不是ö,ue而不是ü和ae而不是ä。

将列上的排序规则设置为“German_Phonebook_CI_AS”或“German_Phonebook_100_CI_AS”似乎也没有帮助。

以前有人遇到过同样的问题吗?

您应该按照以下步骤操作:

  1. 使用重音敏感度创建全文目录
  2. 创建指定德语的全文索引
  3. 查询时使用'FORMSOF(INFLECTIONAL,yourquery)'

请参阅以下示例:

CREATE TABLE MyTable (
    ID int IDENTITY CONSTRAINT PK_MyTable PRIMARY KEY,
    Txt nvarchar(max) COLLATE German_PhoneBook_100_CI_AI NOT NULL
)

INSERT INTO dbo.MyTable
VALUES (N'Müller'), (N'Mueller'), (N'Muller'), (N'Miller')

GO
CREATE FULLTEXT CATALOG FTSCatalog WITH ACCENT_SENSITIVITY=ON AS DEFAULT
CREATE FULLTEXT INDEX ON MyTable (Txt LANGUAGE German) KEY INDEX PK_MyTable
GO
WHILE EXISTS (
    SELECT * FROM sys.dm_fts_index_population
    WHERE database_id=DB_ID()
    AND status<>7
) WAITFOR DELAY '0:0:1'

GO
SELECT * FROM CONTAINSTABLE(dbo.MyTable,Txt,N'FORMSOF(INFLECTIONAL,Müller)')
SELECT * FROM CONTAINSTABLE(dbo.MyTable,Txt,N'FORMSOF(INFLECTIONAL,Muller)')
SELECT * FROM CONTAINSTABLE(dbo.MyTable,Txt,N'FORMSOF(INFLECTIONAL,Mueller)')

GO
DROP FULLTEXT INDEX ON MyTable
DROP FULLTEXT CATALOG FTSCatalog 
GO
DROP TABLE dbo.MyTable

我建议你在这种情况下搜索MüllerMueller

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM