T-SQL在SQL Server 2008 R2中包含搜索和德语变音
我在SQL Server 2008 R2上面临一个问题,那就是我必须使用一个包含搜索,而忽略德语Umlaute-Letters(ä,ö,ü)。T-SQL在SQL Server 2008 R2中包含搜索和德语变音
对于所有非德语的开发者: 德语变音符号可以表示为常规基础字母(a使用ä时)和e。所以穆勒和米勒一样,巴克尔和贝克一样。
我们想要做的是这样的: 当搜索“Müller”时,我们希望找到包含“Mueller”和“Müller”的数据,当输入“Mueller”时,我们希望找到包含“Müller “以及”米勒“。
使用like或=来比较数据时,您只需添加COLLATE German_PhoneBook_CI_AI。当使用带有全文索引的包含搜索时,并不那么容易。 您可以将重音敏感度设置为关闭状态,但包含搜索会像u一样处理ü-Letter,像a和ö字母一样处理o,它不会找到包含oe而不是ö的条目,而不是ü和ae而不是ä。
将列上的排序规则设置为“German_Phonebook_CI_AS”或“German_Phonebook_100_CI_AS”似乎也没有帮助。
有没有人有过同样的问题?
我建议你在这种情况下搜索Müller
和Mueller
。
这不是我们的选择...我们需要找到两个在一个查询中... – DrummingCoder 2010-11-17 16:21:07
哪里包含(姓氏,'Müller')或包含(姓氏,'米勒')或者这会是一个大问题查询? – liggett78 2010-11-22 15:26:35
是的,因为你将如何处理'Cügülü'或'Kögeräspensmüller'的搜索? – alzaimar 2013-03-13 09:34:07
您应该遵循以下步骤:
- 创建全文目录与区分重音
- 创建全文索引指定德语
- 使用“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
这是一个正确的答案和推荐的解决方法。 – alzaimar 2013-03-13 09:34:55
为什么不更新数据库以排除变音器?并只使用替代拼写? – 2010-11-16 10:47:37
我们不能简单地更新数据库......我们在这里谈论的是人民的名字...... – DrummingCoder 2010-11-17 16:21:27
当时你是如何解决这个问题的? – aggsol 2017-08-10 09:28:32