2012-03-25 79 views
0

下面是SID列在一个表中的内容(其中,“S05201215”是 固定字符串和SRING的剩余部分是 数字序列)ORDER BY子句混乱

S052012151 
S052012152 
S052012153 
S052012154 
S052012155 
S052012156 

欲排序字符串的剩余部分(即 ,我已经附加到字符串S05201215在 降序排列..我应该做下面的查询 什么修改的数字,从而获得所需的输出?

SELECT `sid` FROM `mytable` order by SUBSTRING(`sid`,10,length(`sid`)) 
+1

您需要将子串转换为i NT才能使用数字排序。 1,10,2会被你的当前查询排序列表,1,10,2,如果你将其转换为int 1,2,10 – 2012-03-25 19:27:48

回答

1

要以降序排序,只需加上 “DESC” 您的订单结束BY:

SELECT `sid` 
FROM `mytable` 
ORDER BY SUBSTRING(`sid`, 10, length(`sid`)) DESC 

然而,如果SID的值是不同的长度,你可能会想要在排序前将值转换为数值类型:

SELECT `sid` 
FROM `mytable` 
ORDER BY CAST(SUBSTRING(`sid`, 10, length(`sid`)) AS SIGNED) DESC 
+0

: - THX队友......第二查询u've贴出解决我的问题 ... – Pramod 2012-03-25 19:36:08

1

假设(假设是坏)的字符串仍然是相同的长度ALL THE TIME,只是做一个简单的order by sid

0

我不太明白您的数据,但也许是这样的:

SELECT SUBSTRING(sid, 0, 10) AS prefix, SUBSTRING(sid, 11) AS suffix 
    FROM mytable 
ORDER BY suffix 

它看起来很像你想实现自己的小数据库数据库,虽然,这是你应该避免不惜一切代价 - 让数据库做它擅长和规范模型。

2

你试过:

SELECT `sid` FROM `mytable` order by SUBSTRING(`sid`,10,length(`sid`)) DESC