首页 新闻 会员 周边

SQL 加上ceiling函数就全部自动取整.好奇怪,我希望的结果是 sumquan 列 当 case when o时 , 是小数.

0
悬赏园豆:5 [已解决问题] 解决于 2012-04-23 20:04

ta021 列 为 decimal(18,4) 类型

select a.ta001,a.ta002,d.cinvcode,case b.ifint when 0 then a.ta021*1.0000*d.de1/d.de2*(1.0000+d.de3/100.0000-d.de4/100.0000)  
when 1 then ceiling(a.ta021*1.0000*d.de1/d.de2*(1.0000+d.de3/100.0000-d.de4/100.0000)) end as sumquan,
a.ta003,a.lay
from Cmocta a left join cbom c on a.cinvcode = c.cinvcode left join cbomson d on c.bomid=d.bomid  
left join ainventory b on d.cinvcode=b.cinvcode
where a.ta003 between 'G1204-0001' and 'G1204-0001' 

 
以上SQL语句 sumquan 全部自动取整了,好奇怪.

如果换成以下SQL语句,是会显示小数的,

select b.ifint,case b.ifint when 0 then a.ta021*1.0000*d.de1/d.de2*(1.0000+d.de3/100.0000-d.de4/100.0000)  
when 1 then ceiling(2) end as sumquan
from Cmocta a left join cbom c on a.cinvcode = c.cinvcode left join cbomson d on c.bomid=d.bomid  
left join ainventory b on d.cinvcode=b.cinvcode
where a.ta003 between 'G1204-0001' and 'G1204-0001'  
这个SQL语句怎么修改呢,让它该显示小数部分就显示小数部分,该取整的时候就取整呢.

zhengyingcan的主页 zhengyingcan | 初学一级 | 园豆:12
提问于:2012-04-16 11:36
< >
分享
最佳答案
0

这个无非是SQL内置的一个函数,俗称天花板函数,print(ceiling(3.1));它会自动向上取靠近他的整数4.

收获园豆:5
Halower | 小虾三级 |园豆:1723 | 2012-04-16 13:07

我希望 不是统统取整,而该保留小数的时候,就出现小数.

zhengyingcan | 园豆:12 (初学一级) | 2012-04-16 13:10

@zhengyingcan: 

那就确定你想要的精度啊

ROUND函数是四舍五入函数,返回数字表达式并四舍五入为指定的长度或精度。

语法:
ROUND ( numeric_expression , length [ , function ] )
参数:
numeric_expression
精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。
length
是 numeric_expression 将要四舍五入的精度。length 必须是 tinyint、smallint 或int。当 length 为正数时,numeric_expression 四舍五入为 length 所指定的小数位数。当 length 为负数时,numeric_expression 则按 length 所指定的在小数点的左边四舍五入。
function
是要执行的操作类型。function 必须是 tinyint、smallint 或 int。如果省略 function 或 function 的值为 0(默认),numeric_expression 将四舍五入。当指定 0 以外的值时,将截断 numeric_expression。
返回类型
返回与 numeric_expression 相同的类型。
注释
ROUND 始终返回一个值。如果 length 是负数且大于小数点前的数字个数,ROUND 将返回 0。
示例
Result
Remark

select round(748.58,-1)
750.00
从小数点左边第1位四舍五入,其他位为0

select round(748.58,-2)
700.00
从小数点左边第2位四舍五入,其他位为0

select round(748.58,-3)
1000.00
从小数点左边第3位四舍五入,其他位为0

select round(748.58,-4)
0
length 是负数且大于小数点前的数字个数,ROUND 将返回 0

select round(748.58,1)
748.60
四舍五入为length所指定的小数位数

select round(748.58,2)
748.58
四舍五入为length所指定的小数位数

select round(124.9994,3)
124.9990
四舍五入为length所指定的小数位数

select round(124.9995,3)
125.0000
四舍五入为length所指定的小数位数

select round(150.75,0)
151.00
四舍五入的结果

select round(150.75,0,1)
150.00
截断的结果

Halower | 园豆:1723 (小虾三级) | 2012-04-16 13:17
其他回答(1)
0

用switch...case操作,类似于C#中的switch...case的功能

轻狂の书生 | 园豆:1042 (小虾三级) | 2012-04-16 14:10

不是吧,sql 中也有switch case ,真不可思议

支持(0) 反对(0) zhengyingcan | 园豆:12 (初学一级) | 2012-04-16 16:10

@zhengyingcan: 呵呵,数据库编程嘛,也很强大的

支持(0) 反对(0) 轻狂の书生 | 园豆:1042 (小虾三级) | 2012-04-16 16:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册