当前位置:数据库 > DB2 >>

DB2取浮点数的小数部分

DB2取浮点数的小数部分
 
一、最简单,最快捷的方法
各种DB2版本通吃,使用floor函数、或cast函数取整数部分,然后用原来的数减去整数部分即可:  www.zzzyk.com  
DB2 for i上面的查询:
[sql] 
select 123.556 - floor(123.556) from qsys2/qsqptabl              
....+....1....+...                
Numeric Expression                
            .556                  
********  End of data  ********   
DB2 V10.1 for luw上面的查询:
[sql] 
select 123.99-cast(123.99 as int),100.1-floor(100.1) from sysibm.sysdummy1  
1                2  
---------------- --------  
            0.99      0.1  
注意:这里得到的数据直接为浮点数,可以进行数学运算
  www.zzzyk.com  
二、浮点数长度固定、小数位数固定,但实际存储数值不确定的,如下处理:
DB2 for i(AS400)上面的查询
1.使用locate定位转换为字符串后的小数点,然后再根据此小数点,接取整数和小数部分:
[sql] 
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函数定位小数点的位置
还是用上面的数据,得到如下的结果:
[sql] 
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下面的查询:
[sql] 
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,可如下处理:  www.zzzyk.com  
DB2 for i(AS400)上面的查询:
[sql] 
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上面的查询:
[sql] 
select char(123.99),right(trim(char(123.99)),2) from sysibm.sysdummy1  
1       2  
------- -------  
123.99  99  
注意:从这两个DB2数据库版本看出,数值转换为字符串之后,长度都比原有其字符长度多1。
所以在接取字符串的时候,需要将其左右空格去掉(trim)。
这里得到的数值为字符串,若需要进行其他计算或者比较,则应该将其转换为数字进行操作;
使用显示转换,尽量避免DB2进行隐式转换。
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,