這是一個查詢我跑的結果:當數據存儲在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 asc
和desc
但什麼也沒做。
這是一個查詢我跑的結果:當數據存儲在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 asc
和desc
但什麼也沒做。
使用CAST
對待值作爲數字:
ORDER BY CAST(columnName AS FLOAT)
使用VARCHAR你不能......因爲它會按字母順序吧..
也就是說11
會befor 7
。即使101
也會在77
之前出現。
最好以float
作爲數據類型。
字母排序與數字排序不同。將您的列轉換爲浮動或真實。
select cast(your_column as float) float_col
from your_table
order by float_col;
理想的情況是,你要麼
從您的問題中不清楚您的應用程序使用float還是使用精確的數字更好。
你爲什麼要將數字存儲在'nvarchar'列中?解決這個問題,它會正確地「排序」。 –
[踢壞的習慣:選擇錯誤的數據類型](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data- type.aspx) - 你應該總是使用最合適的數據類型 - 畢竟這就是他們所在的地方! –
它的產品名稱,默認情況下這個字段是字符串,我不能改變 – user2547220