包含变音符号的字段上进行SQL搜索

16
我正在为一个使用Sql server 2008 express版的网站搜索工作。我的“Books”表中有一个名为“Title”的字段,其中包含包含罗马尼亚(拉丁)字符的标题。
如果用户在搜索框中插入像“casa”这样的单词,并且我在数据库中有一个标题为“测试casă测试”的书,我希望能显示该书,但是:
select * from books where title like '%casa%'

无法找到它...

你知道有什么函数可以在进行选择时去除变音符号吗?

我知道可以通过sql server的全文搜索插件来解决这个问题,但我想以更简单的方式解决它。

3个回答

22
select * from books where title COLLATE Latin1_General_CI_AI like '%casa%'
当然,你应该选择与你相匹配的排序规则...只需在结尾处将AS更改为AI即可使其“忽略音调”。
使用德语umlauts的快速示例。
DECLARE @foo TABLE (bar varchar(100) /*implied COLLATE Latin1_General_CI_AS*/)

INSERT @foo VALUES ('xxx fish yyy')
INSERT @foo VALUES ('xxx bar yyy' )
INSERT @foo VALUES ('xxx bär yyy')

select * from @foo where bar COLLATE Latin1_General_CI_AI like '%bar%'
select * from @foo where bar like '%bar%'

1
此外,如果您希望搜索时不考虑音调,您可以更改数据库的排序规则。 - Lance Fisher
还有一个问题:您知道如何在LINQ中完成这个操作吗?非常感谢! - Cristian Boariu
@Cristian Boariu:抱歉,我不知道。也许你也无法知道...https://dev59.com/nUbRa4cB1Zd3GeqPzl-e - gbn

6

您需要使用一个不区分大小写的排序规则。


0
如果您需要在LINQ中执行此操作,我认为您首先需要从搜索字符串中删除变音符号,然后再进行LINQ查询...这应该可以正常工作...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接