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

ili*_*ian 62 t-sql sql-server-2005 collation

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

SELECT *
FROM Venue
WHERE Name Like '%cafe%'
Run Code Online (Sandbox Code Playgroud)

那么,如果有一个名称的场所,Big Bobs Café Extraordinaire它将被包含在结果集中?

gbn*_*gbn 95

强制重音不敏感整理

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

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

SELECT *
FROM Venue
WHERE
   Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,您不需要提供两次校对:SELECT*FROM Venue WHERE Name like'%cafe%'COLLATE Latin1_general_CI_AI (15认同)

Mit*_*eat 47

通过对您的选择应用特定的重音不敏感排序规则:

SELECT * 
FROM Venue 
WHERE Name COLLATE Latin1_General_CI_AI Like '%cafe%' COLLATE Latin1_General_CI_AI
Run Code Online (Sandbox Code Playgroud)

CI代表"Case Insensitive",AI代表"Accent Insensitive".

  • 啊,这就是最后所有那些愚蠢的人物的意思.我知道这很愚蠢,但这有很大帮助.不知何故,对我来说,DB整理似乎总是带来大脑迷雾. (9认同)

JIN*_*AJI 5

通过使用可以进行口音敏感和口音不敏感搜索 Latin1_general_CI_AI

AI是针对“不敏感”和AS“ 不敏感”的,即,如果不敏感,则CaféCafe相同。

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

  • latin1 使服务器使用字符集拉丁文1处理字符串,基本上是ascii。

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

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

您的查询应如下所示:

SELECT * FROM Venue WHERE Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI
Run Code Online (Sandbox Code Playgroud)

预期结果如下:

 Id  name
 1  Café
 2  Cafe
Run Code Online (Sandbox Code Playgroud)