关于排序的问题?(写sql语句)(50分)

  • 主题发起人 主题发起人 mnmn
  • 开始时间 开始时间
M

mnmn

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库中有一个字符型字段,字段一般都是这样的:
11-1,2-1,2-10,2-2,。。。。‘-’之前一般是2位数字,之后就不一定了。
现在需要用select语句把这些记录提取出来,要求按上面这个字段排序,排序的结果是:
2-1,2-2,2-10,11-1...
如果直接order by,那么排序的结果就是
2-1,2-10,2-2,11-1...这样就不符合要求了。
这样的sql语句怎么写?
 
SQL几乎不可能
非要如此,还是分两个字段吧
 
你用的是什么数据库,'-'以后一定都是数字吗?
 
什么后台数据库?
 
xeen:用的是sql server,‘-’之后不一定是数字,但是目前争取统一成数字
有办法嘛?
 
to mnmn:
我想了一个方法,先试试。
假设你的字段为F,方法是虚拟两个字段。
select f, substr(1,2) f1,substr(3,n-3) f2 from tablename
order by to_number(f1),to_char(f2);
 
select *
from tablename
order by substring(fieldname,1,charindex('-',fieldname)-1),
right(fieldname,charindex('-',fieldname)+1,datalength(fieldname)-charindex('-',fieldname)
 
全是数字就好办了,比如表名是 mytest,字段名是 mystring:
select * from mytest order by cast(left(mystring,charindex('-',mystring)-1) as int),cast(right(mystring,len(mystring)-charindex('-',mystring)) as int)
 
同意xeen的方法,如果'-'后面的不全是数字的话,就不好弄啦
 
统一成数字也可以是这个样子的
2-01,2-02,2-10,2-11,
这样不就好排序了吗.
 
最简单的方法:
order by replace(字段名,'-','_')
即改为下划线排序
 
后退
顶部