簡體   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