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

4

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

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 类型的列中?修正后它会正确地进行排序。 - Martin Smith
3
不良习惯:选择错误的数据类型 - 你应该始终使用最合适的数据类型 - 毕竟那就是它们存在的目的! - marc_s
这是一个产品的名称,该字段默认为字符串类型,我无法更改。 - user2547220
3个回答

7

使用CAST将值视为数字:

ORDER BY CAST(columnName AS FLOAT)

3

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

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

理想情况下,您应该将浮点数值存储在float或real类型的列中,或者使用支持小数的精确数字类型(numeric类型或decimal类型)。从您的问题中无法确定您的应用程序更适合使用float还是精确数字。

2
使用varchar时,您无法进行排序,因为它会按字母顺序排序。这意味着11将排在7之前,甚至101也会排在77之前。最好使用float作为数据类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接