我想在SQL中比较两个varchar,一个会是像Cafe
这样的字符串,而另一个则是Café
,有没有一种方法可以在SQL中比较这两个值。例如:
SELECT *
FROM Venue
WHERE Name Like '%cafe%'
如果有一个名为Big Bobs Café Extraordinaire
的场所,它将被包含在结果集中吗?
我想在SQL中比较两个varchar,一个会是像Cafe
这样的字符串,而另一个则是Café
,有没有一种方法可以在SQL中比较这两个值。例如:
SELECT *
FROM Venue
WHERE Name Like '%cafe%'
如果有一个名为Big Bobs Café Extraordinaire
的场所,它将被包含在结果集中吗?
将字符集转换为不区分大小写的排序规则(collation)
如果您想要与表变量或临时表varchar列进行比较,您还需要确保双方具有相同的排序规则,以避免错误或进一步的字符集转换。
并且,因为常量值将具有数据库的排序规则。更新:只适用于本地变量,而不适用于常量不对,即使是对于常量也不适用。
SELECT *
FROM Venue
WHERE
Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI
通过在选择语句中应用特定的不区分大小写排序规则:
SELECT *
FROM Venue
WHERE Name COLLATE Latin1_General_CI_AI Like '%cafe%' COLLATE Latin1_General_CI_AI
CI代表“不区分大小写”,AI代表“不区分重音”。
使用 Latin1_general_CI_AI
可以进行区分音调和不区分音调的搜索。
这里,AI
表示不区分音调,AS
表示区分音调。例如,如果不区分音调,Café 和 Cafe 是相同的。
在下面的查询中,Latin1_general_CI_AI
可以分解为以下几个部分:
latin1
使服务器使用 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