2015-11-19 83 views
0

我試圖按我的數據庫中的數字列進行排序,其數值爲0-1000幷包含十進制數字。按訂單編號的SQL

當我使用

ORDER BY len([FY14 Points]), [FY14 Points] 

我得到...

0 
48 
150 
249 
36.9 
39.7 
44.5 
52.5 
54.4 
57.9 
58.4 
60.1 

我也試過......

ORDER BY registration_no * 1 ASC

但得到這個...

Msg 245,Level 16,State 1,Line 6

將varchar值'88.4'轉換爲數據類型int時轉換失敗。

有沒有人知道我能做些什麼來解決這個問題?

+0

爲什麼要使用ORDER BY len([FY14 Points]),[FY14 Points]?這是排序長度(字符數)的值 - 我假設你想這些值按數字排序? – Nathan

回答

0

將列[FY 14 POINTS]的數據類型從varchar更改爲int或decimal數據類型。

0

可以嘗試將registration_no轉換爲十進制:ORDER BY CAST(registration_no as DECIMAL)* 1 ASC。但是,HBMirza的答案是一個更好的方法。

ORDER BY len([FY14 Points]),[FY14 Points]的問題是按照列中值的長度排序。

0

您必須先將其轉換爲十進制數據類型。你可以嘗試使用這個.decimal。然後嘗試根據它進行訂購。

0

斯凱勒,

SQL認爲你已經設置的數據類型[FY14 Points]varchar。這是你需要檢查的內容。當你對數字進行排序時,它將按字面順序排序,這就是你所看到的。這是一些方法。其中之一是在SELECT Statment明確地選擇FY14 Points爲小數或整型,像這樣:

Select columna, columnb, columnc, cast([Fy14 Points] as int) from sometable 

INT可以用任何你想要的數值數據類型來代替。關鍵在於,爲了正確分類,它必須是一個數字。