注册 登录
编程论坛 SQL Server论坛

请教SQL中排序的一个小问题

小糊涂仙 发布于 2007-08-07 17:10, 791 次点击
我有一列字符型数据 编号: 11-1,11-3,111-2,111-5,12-1,14-12,14-123,10-1,10-12
我要依据这列数据进行排序,要求先按'-'前的数字升序排,再按'-'后的数字排.

select *from table1
order by left(编号,charindex('-',编号)-1),stuff(编号,1,charindex('-',编号),'')

请问这样排序为什么不行?
为什么必须要把 left(编号,charindex('-',编号)-1),stuff(编号,1,charindex('-',编号),'') 用convert函数转化为int型呢?
6 回复
#2
西风独自凉2007-08-07 19:08
convert函数转化为int型
你不转化为int

直接order by 编号也会出现一样的结果(和你转化为int的一样)

你先把编号左边的数字截下来作为一个表..然后根据编号两表中间连接
得出结果...然后order by 这个截取来的值就应该可以了啊

根据后面数字排序也一样
#3
小糊涂仙2007-08-07 19:25
我知道如果把截取出来的编号最为一列的话,按照列名也可以实现排序.呵呵,按照楼上的说法似乎有点复杂了,还不如转化了呢~
我想知道的是为什么截取出的字符串不另编为一列就不能作为排序依据呢
#4
西风独自凉2007-08-07 19:32

order by应该只针对table中的字段吧
#5
小糊涂仙2007-08-07 21:08

我明白了 谢谢楼上
#6
sky_yang_sky2007-08-08 08:20
select * from table1 order by left(编号, charindex('-',编号)-1),right(编号,(len(编号)-charindex('-',编号)))
像這樣就可以按你的要求排了,我記得前面有像這樣的例子,樓主為什麼不去查一下
#7
lzalibabalr2007-08-08 09:40

left(编号,charindex('-',编号)-1),stuff(编号,1,charindex('-',编号),'')

这样得出来的是字符串,并不是数字,如果按字符串排序的话,要根据这个字符列的排序规则,所以可能得不到你要的结果.
因此用CONVERT转换成数字型并按asc排序.

stuff(编号,1,charindex('-',编号),'') 得出的结果应该是''数字的字符串,就是说数字前面有''这个字符,因此用
CONVERT转换成数字,可以去掉前面的''这个字符,这样才能用数字的asc进行排序

1