如何将浮点值存储在nvarchar列中时按数字顺序对其进行排序?

时间:2013-07-03 15:22:56

标签: sql sql-server

这些是我运行的查询的结果:

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 个答案:

答案 0 :(得分:7)

使用CAST将值视为数字:

ORDER BY CAST(columnName AS FLOAT)

答案 1 :(得分:2)

使用varchar你不能......因为它会按字母顺序排序..

117101。甚至77也会在float之前出现。

最好将{{1}}作为数据类型。

答案 2 :(得分:2)

按字母顺序排序与数字排序不同。将您的列转换为浮点数或实数。

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

但理想情况下,你应该

  • 将浮点值存储在float或real类型的列中,或
  • 使用支持小数的精确数字类型(键入数字或类型十进制)。

从您的问题中不清楚您的应用程序是使用浮点数还是精确数字更好。