我希望比较SQL中的两个varchars,一个类似Cafe
,另一个Café
在SQL中有一种方法可以比较两个值。例如:
SELECT *
FROM Venue
WHERE Name Like '%cafe%'
如果有一个名称为Big Bobs Café Extraordinaire
的地点,它会包含在结果集中吗?
答案 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”。
您的查询应如下所示:
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'