Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与Sybase相比,如何在SQL server中按顺序管理订单?_Sql_Sql Server_Sql Server 2008_Sybase - Fatal编程技术网

与Sybase相比,如何在SQL server中按顺序管理订单?

与Sybase相比,如何在SQL server中按顺序管理订单?,sql,sql-server,sql-server-2008,sybase,Sql,Sql Server,Sql Server 2008,Sybase,我正在从SybaseIQ迁移到SQLServer2008,一个主要的差异观察者是ORDERBY子句。 在表上创建为create table test(名称varchar(20)) 插入一些记录: insert into test values('Hi') insert into test values('Toi') insert into test values('>Toi') insert into test values('iHh') insert into test values('

我正在从SybaseIQ迁移到SQLServer2008,一个主要的差异观察者是ORDERBY子句。 在表上创建为
create table test(名称varchar(20))

插入一些记录:

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 * from test order by name desc
Sybase的结果是:

name    
------- 
iHh     
hi      
Toi     
IhH     
Hi      
>Toi    
2Hi     
1Hi   
SQL server的结果是:

name    
------- 
Toi     
IhH     
iHh     
Hi      
hi      
2Hi     
1Hi     
>Toi  
为什么SQL server和Sybase的顺序不同?如何在SQL server中管理order by(与Sybase相比)以获得相同的结果?

您可以将排序规则用作SQL server默认排序规则,或使用
order
子句的指定排序规则

二进制排序规则

二进制排序规则根据 由区域设置和数据类型定义的编码值。他们是 区分大小写。SQL Server中的二进制排序规则定义区域设置 以及将要使用的ANSI代码页。这将强制执行二进制排序 秩序。因为它们相对简单,所以二进制排序规则很有帮助 提高应用程序性能。对于非Unicode数据类型,数据 比较基于ANSI标准中定义的代码点 代码页。对于Unicode数据类型,数据比较基于 Unicode代码点。对于Unicode数据类型的二进制排序规则 在数据排序中不考虑区域设置。例如 拉丁字母1通用字母和日语字母产生相同的排序结果 当它们用于Unicode数据时

有两种类型的二进制文件 SQL Server中的排序规则;旧的BIN排序规则和新的BIN2 整理在BIN2排序规则中,所有字符都按照 它们的代码点。在BIN排序规则中,只有第一个字符是 根据代码点排序,剩余字符为 根据字节值排序。(因为英特尔平台是 一个小小的endian架构,Unicode代码字符总是 存储字节交换。)

或者只是

select * from @Test order by name collate Latin1_General_BIN2 desc

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

SELECT Name FROM @tblTest ORDER BY ASCII(Name) desc,Name
降序输出:

升序输出:


排序顺序不能由ASCII正确确定,因为它只返回最左边字符的代码。正如我在我的系统中测试过的那样,它符合op要求,所以我给出了答案当前数据库比较是
SQL\u Latin1\u General\u CP1\u CS\u as
,其他数据库需要区分大小写和重音request@Pravin可以为ORDER子句使用指定排序规则
SELECT Name FROM @tblTest ORDER BY ASCII(Name) desc,Name