首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Sybase相比,如何在SQL server中管理order by?

与Sybase相比,如何在SQL server中管理order by?
EN

Stack Overflow用户
提问于 2016-12-29 14:13:47
回答 2查看 354关注 0票数 2

我正在从SybaseIQ迁移到SQL Server2008,一个主要的差异观察者是ORDER BY子句。在表上创建为create table test(name varchar(20))

插入了一些记录:

代码语言:javascript
复制
insert into test values('Hi')
insert into test values('Toi')
insert into test values('>Toi')
insert into test values('iHh')
insert into test values('hi')
insert into test values('IhH')
insert into test values('1Hi')
insert into test values('2Hi')

以如下方式在SQL Server和Sybase上执行select操作:

代码语言:javascript
复制
 select * from test order by name desc

Sybase的结果是:

代码语言:javascript
复制
name    
------- 
iHh     
hi      
Toi     
IhH     
Hi      
>Toi    
2Hi     
1Hi   

SQL server的结果为:

代码语言:javascript
复制
name    
------- 
Toi     
IhH     
iHh     
Hi      
hi      
2Hi     
1Hi     
>Toi  

为什么这个顺序在SQL server和Sybase中不同?如何在SQL server中管理order by与Sybase中的order by得到相同的结果?

EN

回答 2

Stack Overflow用户

发布于 2016-12-29 14:22:44

可以将排序规则Latin1_General_BIN2用作SQL server的默认排序规则,也可以对ORDER子句使用指定排序规则。

二进制排序规则

二进制排序规则根据区域设置和数据类型定义的编码值序列对数据进行排序。它们区分大小写。SQL Server中的二进制排序规则定义了将使用的区域设置和ANSI代码页。这将强制执行二进制排序顺序。由于二进制排序规则相对简单,因此有助于提高应用程序性能。对于非Unicode数据类型,数据比较基于ANSI代码页中定义的代码点。对于Unicode数据类型,数据比较基于Unicode代码点。对于Unicode数据类型的二进制排序规则,数据排序中不考虑区域设置。例如,当Latin_1_General_BIN和Japanese_BIN用于Unicode数据时,它们产生相同的排序结果。

SQL Server中有两种二进制排序规则:较旧的BIN排序规则和较新的BIN2排序规则。在BIN2排序规则中,所有字符都是按照它们的码位排序的。在排序规则中,只有第一个字符是根据码位排序的,其余的字符是根据它们的字节值排序的。(由于英特尔平台采用小端体系结构,因此Unicode代码字符始终以字节交换方式存储。)

代码语言:javascript
复制
declare @Test table (name varchar(20) collate Latin1_General_BIN2)
insert @Test values ('Hi'), ('Toi'), ('>Toi'), ('iHh'), ('hi'), ('IhH'), ('1Hi'), ('2Hi')

select * from @Test order by name desc

或者只是

代码语言:javascript
复制
select * from @Test order by name collate Latin1_General_BIN2 desc
票数 1
EN

Stack Overflow用户

发布于 2016-12-29 14:25:20

对列使用ASCII值,并按降序顺序按其排序。ASCII将为您的第一个word排序,然后您可以对列应用排序

代码语言:javascript
复制
SELECT Name FROM @tblTest ORDER BY ASCII(Name) desc,Name

降序排列的输出:

以升序表示的输出:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41374115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档