DB2取浮点数的小数部分

一、最简单,最快捷的方法

各种DB2版本通吃,使用floor函数、或cast函数取整数部分,然后用原来的数减去整数部分即可:

DB2 for i上面的查询:

select 123.556 - floor(123.556) from qsys2/qsqptabl            
....+....1....+...              
Numeric Expression              
            .556                
********  End of data  ******** 

DB2 V10.1 for luw上面的查询:

select 123.99-cast(123.99 as int),100.1-floor(100.1) from sysibm.sysdummy1
1                2
---------------- --------
            0.99      0.1
注意:这里得到的数据直接为浮点数,可以进行数学运算


二、浮点数长度固定、小数位数固定,但实际存储数值不确定的,如下处理:

DB2 for i(AS400)上面的查询

1.使用locate定位转换为字符串后的小数点,然后再根据此小数点,接取整数和小数部分:

select substr(char(123.99),locate('.',char(123.99))+1),char(123.99)
 from qsys2/qsqptabl                                                                       
....+....1....+....2....        
SUBSTR   CHAR ( 123.99 )        
99           123.99             
********  End of data  ******** 

2.使用position或者posstr函数定位小数点的位置

还是用上面的数据,得到如下的结果:

select char(123.99),                                        
       substr(char(123.99),position('.' in char(123.99))+1),
       substr(char(123.99),posstr(char(123.99),'.')+1)      
  from qsys2/qsqptabl                                       
....+....1....+....2....+....3...
CHAR ( 123.99 )  SUBSTR   SUBSTR 
    123.99       99       99     
********  End of data  ********  

DB2 V10.1 for luw下面的查询:

select char(123.99),
       substr(char(123.99),
       position('.' in char(123.99) using octets)+1),
       substr(char(123.99),posstr(char(123.99),'.')+1) 
  from sysibm.sysdummy1
1       2       3
------- ------- -------
123.99  99      99


三、若浮点数长度、小数位数固定,实际存储值固定,如整数长度为3,小数位数为2,可如下处理:

DB2 for i(AS400)上面的查询:

select char(123.99),               
       right(trim(char(123.99)),2) 
  from qsys2/qsqptabl                                                                      
....+....1....+....2....       
CHAR ( 123.99 )  RIGHT         
    123.99       99            
********  End of data  ********  

DB2 V10.1 for windows上面的查询:

select char(123.99),right(trim(char(123.99)),2) from sysibm.sysdummy1
1       2
------- -------
123.99  99

注意:从这两个DB2数据库版本看出,数值转换为字符串之后,长度都比原有其字符长度多1。

所以在接取字符串的时候,需要将其左右空格去掉(trim)。

这里得到的数值为字符串,若需要进行其他计算或者比较,则应该将其转换为数字进行操作;

使用显示转换,尽量避免DB2进行隐式转换。

DB2函数position

DB2函数locate

DB2函数right

--the end--

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值