在SQL Server中,如何执行不区分重音符号的比较(例如,e与è,é,ê和ë)?

13 浏览
0 Comments

在SQL Server中,如何执行不区分重音符号的比较(例如,e与è,é,ê和ë)?

我想在SQL中比较两个varchar类型的值,其中一个是Cafe,另一个是Café。是否有一种方法可以让这两个值进行比较?例如:

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

这样,如果有一个名为Big Bobs Café Extraordinaire的场所,它将被包含在结果集中。

0
0 Comments

问题的原因是需要在SQL Server中进行一个忽略重音的比较,即将e与è, é, ê和ë视为相同的字符。为了解决这个问题,可以使用"Latin1_general_CI_AI"来实现忽略重音的比较。

在下面的查询中,我们可以将"Latin1_general_CI_AI"分解为以下几个部分:

- "latin1"表示服务器使用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

通过使用"Latin1_general_CI_AI"进行字符集和大小写不敏感的比较,我们可以实现忽略重音的比较。

0
0 Comments

问题的原因是在SQL Server中进行区分大小写和重音的比较非常困难。在某些情况下,可能需要对包含特定重音字符的字符串进行比较,但默认情况下,SQL Server会将这些字符视为不同的字符,并且在比较时将它们视为不匹配。

解决此问题的方法是使用collation(排序规则)来强制执行重音不敏感的比较。可以通过为比较操作的两边设置相同的collation来实现这一点。如果要与表变量或临时表varchar列进行比较,则还需要确保两边具有相同的collation,以避免错误或进一步的强制转换。

以下是使用collation进行重音不敏感比较的示例代码:

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

在这个例子中,我们使用Latin1_general_CI_AI collation来比较Name列中是否包含"cafe"字符串,而忽略重音字符。请注意,我们不需要在Like子句中提供collation,因为已经在Name列上设置了正确的collation。

另外,如果在Entity Framework中使用这个查询,还需要确保修改了列的collation。可以使用ALTER TABLE语句来修改列的collation,如下所示:

ALTER TABLE mytable ALTER COLUMN description varchar(48) COLLATE SQL_Latin1_General_CP1_CI_AI

通过执行这个ALTER TABLE语句,我们将description列的collation从Czech_CI_AS修改为SQL_Latin1_General_CP1_CI_AI,以便与查询中使用的collation匹配。

通过这些方法,我们可以在SQL Server中实现重音不敏感的比较,并解决在Entity Framework中使用该查询时可能遇到的问题。

0
0 Comments

在SQL Server中执行不区分重音符的比较(例如e与è, é, ê和ë)的方法是通过在select语句中应用特定的不区分重音符的排序规则(collation):

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

CI代表“不区分大小写”(Case Insensitive),AI代表“不区分重音符”(Accent Insensitive)。

这些附加字符的意义就是这样。我知道这可能有些愚蠢,但它确实非常有用。对我来说,数据库的排序规则总是让我感到困惑。

非常有用的解释。我可以得出结论,我需要使用Finnish_Swedish_CI_AI排序规则。在瑞典语中,我们有å,ä和ö作为字母的一部分,而我的目标是像é这样不属于该语言的变体。

这样,我们可以通过在select语句中应用特定的排序规则来实现在SQL Server中执行不区分重音符的比较。

0