2013-07-03 83 views
1

這是一個查詢我跑的結果:當數據存儲在nvarchar列中時,如何按浮點值排序浮點值?

10 
10.5 
11 
11.5 
12 
12.5 
13 
5 
5.5 
6 
6.5 
7 
7.5 
8 
9.5 
8.5 
9 

列的數據類型爲nvarchar

如何根據結果排序?

我試過Order by ascdesc但什麼也沒做。

+3

你爲什麼要將數字存儲在'nvarchar'列中?解決這個問題,它會正確地「排序」。 –

+2

[踢壞的習慣:選擇錯誤的數據類型](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data- type.aspx) - 你應該總是使用最合適的數據類型 - 畢竟這就是他們所在的地方! –

+0

它的產品名稱,默認情況下這個字段是字符串,我不能改變 – user2547220

回答

7

使用CAST對待值作爲數字:

ORDER BY CAST(columnName AS FLOAT) 
2

使用VARCHAR你不能......因爲它會按字母順序吧..

也就是說11會befor 7。即使101也會在77之前出現。

最好以float作爲數據類型。

1

字母排序與數字排序不同。將您的列轉換爲浮動或真實。

select cast(your_column as float) float_col 
from your_table 
order by float_col; 

理想的情況是,你要麼

  • 店float類型或真正的列浮點值,或
  • 使用支持小數(型數字精確的數值類型或類型十進制)。

從您的問題中不清楚您的應用程序使用float還是使用精確的數字更好。