如何在SQL Server中执行重音不敏感比较(e与è,é,ê和ë)?

时间:2010-03-17 10:41:16

标签: sql-server-2005 tsql collation

我希望比较SQL中的两个varchars,一个类似Cafe,另一个Café在SQL中有一种方法可以比较两个值。例如:

SELECT *
FROM Venue
WHERE Name Like '%cafe%'

如果有一个名称为Big Bobs Café Extraordinaire的地点,它会包含在结果集中吗?

4 个答案:

答案 0 :(得分:90)

强制对重音不敏感collation

如果要与表变量或临时表varchar列进行比较,您还需要确保双方具有相同的排序规则以避免错误或进一步强制

并且因为常量值将具有数据库更新的排序规则:仅用于局部变量,而不用于常量 nope,甚至不是

SELECT *
FROM Venue
WHERE
   Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI

答案 1 :(得分:46)

将特定的重音不敏感collation应用于您的选择:

SELECT * 
FROM Venue 
WHERE Name COLLATE Latin1_General_CI_AI Like '%cafe%' COLLATE Latin1_General_CI_AI

CI代表“Case Insensitive”,AI代表“Accent Insensitive”。

答案 2 :(得分:4)

重音敏感和重音不敏感搜索可以使用Latin1_general_CI_AI

此处AI适用于Accent Insensitive,AS适用于Accent Sensitive 即,如果Accent Insensitive,Café Cafe 是相同的。

在下面的查询Latin1_general_CI_AI中可以分解为以下部分。

  • latin1使服务器使用charset latin 1处理字符串,基本上是ascii。

  • CI 指定不区分大小写,因此“ABC”等于“abc”。

  • AI 指定不区分重音,因此'ü'等于'u'。

您的查询应如下所示:

SELECT * FROM Venue WHERE Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI

预期结果如下:

 Id  name
 1  Café
 2  Cafe

答案 3 :(得分:1)

如果'A'COLLATE SQL_Latin1_General_CP1_CS_AS ='a'COLLATE SQL_Latin1_General_CP1_CS_AS 选择N'Yes' 其他 选择N'No'