查询数据库中的排序顺序

Posted

技术标签:

【中文标题】查询数据库中的排序顺序【英文标题】:Query on collating sequence in database 【发布时间】:2015-02-25 09:04:53 【问题描述】:

按照这个link,我想了解一下

 Case-sensitivity in string comparison depends on the collating sequence used

根据检索到的附加信息,使用来自msdn的这些信息,我无法理解以下语句的整理含义:

排序规则指定表示数据集中每个字符的位模式。排序规则还确定排序和比较数据的规则。 SQL Server 支持在单个数据库中存储具有不同排序规则的对象。对于非 Unicode 列,排序规则设置指定数据的代码页以及可以表示的字符。在非 Unicode 列之间移动的数据必须从源代码页转换到目标代码页。

那么,你能通过一个例子帮助我理解数据库中排序序列的含义/意义吗?

注意:我目前正在参加数据库介绍课程。

【问题讨论】:

【参考方案1】:

在创建数据库时,您可能会觉得需要以不同的语言存储数据,并且不同的语言会有不同数量的字符和不同的排序顺序,因此您可能需要某种方式对它们进行相应的排序,此时我们使用排序规则。排序规则控制字符串值的排序方式。在 TSQL 中,您可以使用 collat​​e 子句定义它,如下所述http://msdn.microsoft.com/en-us/library/ms184391.aspx

如果您想了解支持的不同配置,您可以查看文档。如果您在创建数据库时未定义任何排序规则,它将从当前 sql server 实例中选择默认排序规则。您还可以在数据库表或列中应用排序规则,并且可以在选择将应用于排序顺序的数据时使用排序规则。

这里有一个相关问题,可以帮助你进一步理解What does 'COLLATE SQL_Latin1_General_CP1_CI_AS' do?

【讨论】:

如果排序规则不同,为什么会影响比较字符串值?我不明白这一点。例如:SELECT * FROM MyTable1 M1 INNER JOIN MyTable2 M2 ON M1.Comments = M2.Comments 这里MyTable1Comments VARCHAR(100) COLLATE Latin1_General_CI _AS 列,MyTable2Comments VARCHAR(100) COLLATE SQL_Lati n1_General_CP1_CI_AS 列。该查询导致错误,所以我仍然不清楚,为什么当排序规则不同时=不会发生?请帮帮我!!! 不同的排序规则将以不同的方式存储数据,除非您即时将排序规则转换为相同的排序规则,否则无法进行比较。您可以使用使用不同排序规则的 select 语句,您将看到数据采用不同的格式。详细答案在这里olcot.co.uk/sql-blogs/…

以上是关于查询数据库中的排序顺序的主要内容,如果未能解决你的问题,请参考以下文章

交叉表查询中的日期顺序 - 使用单独的表进行排序

如何先按搜索词排序查询结果,然后按字母顺序?

按查询的where子句中的字段顺序对sql查询的结果进行排序

分针网—每日分享:mongoose对查询结果进行排序

CAML查询中的自定义排序顺序

领域查询顺序是不是一致?