bigdecimal除法保留小数DB2中进⾏sql除法运算结果为⼩数时显⽰0的解决⽅案
转⾃:
在进⾏sql除法运算时,在DB2的环境下SELECT出来的值是0,这应该如何处理呢?本⽂将为您介绍DB2中进⾏sql除法运算结果为⼩数时显⽰0问题的两种解决⽅法,供您参考。
SELECT field1/field2 FROM TB;
当 field1的数值 > field2的数值时,除法得出的结果是<1的,即0.xxxxxx
这个时候在DB2的环境下SELECT出来的值是0
这个有两个解决⽅法
⽅法1:
DB CFG的⼀个参数MIN_DEC_DIV_3,这个参数在GET DB CFG FOR DB中并不会列出,但却可以修改。
数据库配置参数MIN_DEC_DIV_3会更改涉及⼩数的⼗进制算术运算的结果⼩数位。
默认值为No,则⼩数位计算为 31-p+s-s'。
如果设置为Yes,则⼩数位计算为 MAX(3, 31-p+s-s')。
这会导致⼗进制⼩数部分始终⾄少具有3位的⼩数位。精度始终为31。
这个⽅法貌似需要通过DBA对数据库进⾏设置,不太靠谱⼉,有另外⼀种⽅法可以曲线救国,登场:
将sql语句修改为:
View Code SQL1
SELECT CAST(field1 AS DOUBLE)/field2 FROM TB;
就是先把field1转换成DOUBLE类型的,这样计算出来的就会得出⼩数点了,会显⽰出0.xxxxxx
接下来,需要对得出的⼩数点位数进⾏约束,那就⽤四舍五⼊吧,
View Code SQL1
SELECT ROUND(CAST(field1 AS DOUBLE)/field2, 2) FROM TB;
这个意思就是说四舍五⼊,保留两位⼩数点
但是如果field1或者field2有⼀个字段为NULL的话,那么结果为NULL,这个时候根据逻辑需要进⾏如下的⼀个操作,
如果数据列的值为NULL,将其设置为0,那么sql就要这么写
View Code SQL1
SELECT ROUND(COALESCE(CAST(field1 AS DOUBLE), 0)/field2, 2) FROM TB;
COALESCE这个函数系统的⽤法如下:
a. 输⼊参数为字符类型,且允许为空的,可以使⽤COALESCE(inputParameter,”)把NULL转换成”;
b. 输⼊类型为整型,且允许为空的,可以使⽤COALESCE(inputParameter,0),把空转换成0;
c. 输⼊参数为字符类型,且是⾮空⾮空格的,可以使⽤COALESCE(inputParameter,”)把NULL转换成”,然后判断函数返回值是否为”;
d. 输⼊类型为整型,且是⾮空的,不需要使⽤COALESCE函数,直接使⽤IS NULL进⾏⾮空判断。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论