2015-11-19 63 views
0

我试图按我的数据库中的数字列进行排序,其数值为0-1000并包含十进制数字。按订单编号的SQL

当我使用

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

为什么要使用ORDER BY len([FY14 Points]),[FY14 Points]?这是排序长度(字符数)的值 - 我假设你想这些值按数字排序? – Nathan

回答

0

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

0

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

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

0

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

0

斯凯勒,

SQL认为你已经设置的数据类型[FY14 Points]varchar。这是你需要检查的内容。当你对数字进行排序时,它将按字面顺序排序,这就是你所看到的。这是一些方法。其中之一是在SELECT Statment明确地选择FY14 Points为小数或整型,像这样:

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

INT可以用任何你想要的数值数据类型来代替。关键在于,为了正确分类,它必须是一个数字。