2012-03-25 82 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