2013-12-11 230 views
0

我想知道是否有一种方法可以在SQL转换浮点数的补零数小数点例如后,如果我有以下表格:sql中漂浮零填充

.--------------------.-------. 
|  name  | grade | 
.--------------------.-------. 
| courseE   | 5  | 
| courseG   | 4  | 
| courseB   | 2.5 | 
| courseC   | 2.5 | 
| courseF   | 1.25 | 
| courseD   | 0  | 

我想现场grade转换为zerro填充数,结果会是这样:

.--------------------.-------. 
|  name  | grade | 
.--------------------.-------. 
| courseE   | 5.000 | 
| courseG   | 4.000 | 
| courseB   | 2.500 | 
| courseC   | 2.500 | 
| courseF   | 1.250 | 
| courseD   | 0.000 | 

我试图校级为float由usibg的CAST(EXP) AS FLOAT转换,但为什么没有和我一起工作?

在此先感谢

+2

这是一个**呈现**的问题,所以应该由处理您的表示层:报告,表单,应用程序,网页等。 – gvee

+0

@gvee不,我之前通过使用CAST做了它,它工作但现在不起作用! – flashdisk

+0

仅仅因为你*可以*在SQL中做某些事情,并不意味着它应该在那里完成。 – gvee

回答

1

错误从float开始 - 因为没有这种数据类型可用于CAST()转换。相反,你应该使用DECIMAL,这还允许你设置decimal和numeric部分:

SELECT name, CAST(grade AS DECIMAL(4, 3)) FROM t 

关于格式:第一个数字表示数字将有多少握住你decimal值,而第二个数字表示多少小数数字将(即点后)。更准确地说,这不是格式,它是特定的数据类型的限制定义(自decimal是在MySQL的一个特殊定点数据类型)

+0

如果我的号码没有固定的位数,该怎么办? – flashdisk

+0

这将工作 - 只需将'4'改为'10'(或类似) - 整数不会超过定义的限制,而整数部分将被正确表示 –

+0

它的工作,谢谢 – flashdisk

1
select convert(decimal(10, 3), @number) 

数字“3”代表的小数位数,你以后想“”

+0

你能解释一下吗?! – flashdisk

+0

如果我想在此转换成绩:select tid,sid,coalesce(grade,0)作为成绩从教,我该怎么办? – flashdisk

+0

这就是它听起来你想要的SQL。将“@number”替换为您的列。 –