例如在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行
SELECT *
FROM test1
ORDER BY prod_name
COLLATE SQL_Latin1_General_CP850_BIN2
binary sort,它基于由字符编码方案定义的字符的数值(这是最快的方法)。
下划线字符(_
)的ASCII代码为95,而A-Z的范围为65至90。因此,您看到的结果。产生预期结果的一种方法是进行
语言排序
:使用此设置,对字符进行排序[独立于字符编码方案中的数值。 我玩弄参数,这是按预期排序的解决方案:select * from test1 order by nlssort(prod_name, 'nls_sort = punctuation')
请注意,这比执行二进制排序要慢。