Sql server 2005 如何在SQL Server中执行不区分重音的比较(e与è、è、è和ë)?
我想比较SQL中的两个varchar,一个类似于Cafe,另一个Café在SQL中有一种方法可以比较这两个值。例如:Sql server 2005 如何在SQL Server中执行不区分重音的比较(e与è、è、è和ë)?,sql-server-2005,tsql,collation,Sql Server 2005,Tsql,Collation,我想比较SQL中的两个varchar,一个类似于Cafe,另一个Café在SQL中有一种方法可以比较这两个值。例如: SELECT * FROM Venue WHERE Name Like '%cafe%' 因此,如果有一个名为Big Bobs CaféExtraordinaire的场馆,它将被包括在结果集中?通过对您的选择应用特定的不区分重音: SELECT * FROM Venue WHERE Name COLLATE Latin1_General_CI_AI Like '%cafe%
SELECT *
FROM Venue
WHERE Name Like '%cafe%'
因此,如果有一个名为Big Bobs CaféExtraordinaire的场馆,它将被包括在结果集中?通过对您的选择应用特定的不区分重音:
SELECT *
FROM Venue
WHERE Name COLLATE Latin1_General_CI_AI Like '%cafe%' COLLATE Latin1_General_CI_AI
CI代表不区分大小写,AI代表不区分重音 强制使用不区分重音的 如果要与表变量或temp table varchar列进行比较,还需要确保双方具有相同的排序规则,以避免错误或进一步的强制 而且因为常量值将具有数据库更新的排序规则:仅适用于局部变量,不适用于常量nope,甚至不适用于nope
SELECT *
FROM Venue
WHERE
Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI
通过使用Latin1_general_CI_AI可以进行区分重音和不区分重音的搜索 这里AI表示不区分重音,而表示区分重音 也就是说,咖啡馆和咖啡馆是一样的,如果不区分重音的话 在下面的查询中,Latin1_general_CI_AI可以分解为以下部分 latin1使服务器使用字符集latin 1(基本上是ascii)处理字符串 CI指定不区分大小写,因此ABC等于ABC AI指定不区分重音,因此'u'等于'u'。 您的查询应如下所示:
SELECT * FROM Venue WHERE Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI
Id name
1 Café
2 Cafe
预期结果如下:
SELECT * FROM Venue WHERE Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI
Id name
1 Café
2 Cafe
啊,这就是结尾那些愚蠢的角色的意思。我知道这很愚蠢,但这帮了大忙。不知何故,对我来说,DB排序似乎总是带来大脑迷雾。在这种情况下,您不需要提供两次排序:从名称为“%cafe%”的地点选择*排序拉丁1\u general\u CI_AI@PollusB:是的,我的badI实现了这个答案,搜索不区分重音,但副作用是,我在select查询中缺少了一些重音。例如,带有急性U+0107的c。在列属性中,我看到SQL\u Latin1\u General\u CP1\u CI\u AI排序规则。我使用以下语句更改了排序规则:ALTER TABLE mytable ALTER COLUMN description varchar48 COLLATE SQL\u Latin1\u General\u CP1\u CI\u AI。它以前是捷克语的。如果我在回答中使用查询而不更改列的排序规则,则它在实体框架中不起作用。