按编号排序的SQL

时间:2015-11-19 23:54:48

标签: sql

我正在尝试按数据库中的数字列排序,其值为0-1000并包含十进制数字。

当我使用

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时,转换失败。

有谁知道我可以做些什么来解决这个问题?

4 个答案:

答案 0 :(得分:0)

将[FY 14 POINTS]列的数据类型从varchar更改为int或decimal数据类型。

答案 1 :(得分:0)

可以尝试将registration_no强制转换为十进制:ORDER BY CAST(registration_no as DECIMAL)* 1 ASC。但是,HBMirza的答案将是一个更好的方法。

ORDER BY len([FY14 Points]),[FY14 Points]的问题是它按列中值的长度排序。

答案 2 :(得分:0)

您必须先将其转换为十进制数据类型。你可以试试to_decimal。然后尝试根据它进行订购。

答案 3 :(得分:0)

斯凯勒,

SQL认为您已将[FY14 Points]的数据类型设置为varchar。这是您需要检查的内容。当您对varchars的数字进行排序时,它将按照字母顺序排序,这就是您所看到的。这是一些方法。一个将在SELECT Statment explicity select FY14 Points中作为小数或整数,如下所示:

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

int可以替换为您想要的任何数值数据类型。关键点在于,为了正确排序,它必须是一个数字。