为什么下面数据的升序排序结果是这样,烦请各位大侠解释

braveboy1979 2006-02-09 11:27:33
--问题,为什么下面数据的升序排序结果是000520zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz在前,而不是在后,烦请各位大侠解释解释
--例子数据描述
--000520zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
--0005zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
--总长为91
--的ascii为8
--之前数据长度为60,即0005与000520长度都是60,之前存在ascii为31的字符补齐,
--后是30个小写字母z
drop table test3
create table TEST3
(
id1 varchar(600),
)
insert into test3 values('0005zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz')
insert into test3 values('000520zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz')

--奇怪
select * from test3 order by id1 asc
--结果
--000520zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
--0005zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

--更奇怪
select * from test3 order by left(id1,61) asc
--结果
--0005zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
--000520zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

...全文
99 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
子陌红尘 2006-02-09
--更奇怪
select * from test3 order by left(id1,61) asc
--结果
--0005zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
--000520zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
--------------------------------------------------------------------------------------------------------------------------
楼主的测试环境是什么?我这边的默认安装配置环境下测试结果与上面的结果恰恰相反。
回复
samfeng_2003 2006-02-09
可以这样排序!

create table TEST3
(
id1 varchar(600),
)
insert into test3 values('0005zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz')
insert into test3 values('000520zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz')

select * from test3 order by left(id1,patindex('%[^0-9]%',id1)-1) asc


drop table test3

id1
------------------------------------------------------------------------------ 0005zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
000520zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

(所影响的行数为 2 行)
回复
samfeng_2003 2006-02-09
000520是小于0005zz所以从2的地方开始,那么就判断出了000520小于0005zz
回复
braveboy1979 2006-02-09
--例子数据描述
--000520zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
--0005zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
--总长为91
--的ascii为8
--之前数据长度为60,即0005与000520长度都是60,之前存在ascii为31的字符补齐,
--后是30个小写字母z
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-02-09 11:27
社区公告
暂无公告