2014-06-27 54 views
0

使用FORMAT()從我的結果中去除一些不必要的小數位後,我無法正確排序該字段,因爲該字段現在是一個字符串而不是數字。如何在MySQL中的FORMAT()之後按數字順序排序字段?

什麼是排序結果然後刪除小數位(或相反)的好實踐,以便它們按正確的數字順序排序?格式之前


結果

ORDER BY `Field` ASC 

*---------* 
| 1000.06 | 
| 2000.17 | 
| 3000.12 | 
| 10000.4 | 
| 20000.1 | 
| 30000.2 | 
*---------* 

結果數字順序排序,但也有需要被刪除不需要的小數位。格式化後


結果()

ORDER BY `Field` ASC 

*---------* 
| 1,000 | 
| 10,000 | 
| 2,000 | 
| 20,000 | 
| 3,000 | 
| 30,000 | 
*---------* 

結果不得不去掉小數,但作爲FORMAT()取得了該領域的字符串,則它不排序數字,因爲我們需要的,但按字母順序。


需要的結果

*---------* 
| 1,000 | 
| 2,000 | 
| 3,000 | 
| 10,000 | 
| 20,000 | 
| 30,000 | 
*---------* 

所需的結果是對結果進行數字順序排序,並有小數位中移除。

+0

我應該說,我試圖在它周圍拍一個'CAST()',但它引起了錯誤。 (前一行是'FORMAT(...,0)AS Field'成爲CAST(FORMAT(...,0)as INTEGER)AS Field',但是這導致了錯誤。)因爲我不確定這是否是這樣做的理想順序(即良好的做法),我想我會問。 – Eilidh

+0

我是否理解正確,如果我說:你有一個號碼。您將其轉換爲字符串。你想將它轉換回數字並排序? – zerkms

+0

我有一些數字帶有凌亂的小數位,我不需要(例如'1,000.00067')。我需要*刪除小數位*並按數字順序正確排序。我被建議使用'FORMAT()'去除小數位,但我不確定這是否與數字順序排序兼容,如果是的話,最好的做法是什麼。 – Eilidh

回答

2

只需選擇格式化的值並按照未格式化的順序排序。

SELECT FORMAT(value, 0) FROM t ORDER BY value ASC 
+0

我的值是從其他字段派生的,所以它實際上更像'((SUM(FieldOne))/(SUM(CASE WHEN FIELDTwo!= 0 THEN 1 ELSE 0 END))AS Field' - 我不知道如何在這種情況下,當它更復雜時,可以這樣做嗎? 對不起,如果這是一個愚蠢的問題,我對此很新。 – Eilidh

0

如果你需要的所有FORMAT爲被捨去小數的地方,剛剛擺脫它,並使用類似CAST(... AS signed)代替。