我正在尝试按数据库中的数字列排序,其值为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时,转换失败。
有谁知道我可以做些什么来解决这个问题?
答案 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可以替换为您想要的任何数值数据类型。关键点在于,为了正确排序,它必须是一个数字。