[英]Result like Oracle query in SQL Server 2016
例如在 Oracle 中
create table test1(Prod_Name varchar2(30))
insert into test1 values('CHANNEL')
insert into test1 values('SHELL')
insert into test1 values('_DISTRIBUTOR BELT')
select * from test1 order by prod_name asc
选择查询给出以下结果
Prod_Name
CHANNEL
SHELL
_DISTRIBUTOR BELT
但在 SQL Server 中它给出以下结果
Prod_Name
_DISTRIBUTOR BELT
CHANNEL
SHELL
我希望结果与 SQL Server 中的 Oracle 相同,所以如何编写查询。 澄清一下,我希望 CHANNEL、SHELL 和 _DISTRIBUTOR BELT 排在最后
在 SQL Server 中,您可以在使用 COLLATE 时强制进行排序。 尝试下面的脚本,您应该以这种方式获得预期的输出。
SELECT *
FROM test1
ORDER BY prod_name
COLLATE SQL_Latin1_General_CP850_BIN2
这很棘手。 Oracle 和 SQL Server 有不同的排序规则。 Oracle 默认执行二进制排序,它基于字符编码方案定义的字符的数值(这是最快的方法)。
下划线字符 ( _
) 的 ASCII 代码为 95,而 AZ 的范围从 65 到 90。因此您看到的结果。
产生预期结果的一种方法是进行语言排序:使用此设置,字符的排序独立于它们在字符编码方案中的数值。
我尝试了这些参数,这是一个按预期排序的解决方案:
select * from test1 order by nlssort(prod_name, 'nls_sort = punctuation')
请注意,这比进行二进制排序要慢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.