DB2取浮點數的小數部分 一、最簡單,最快捷的方法 各種DB2版本通吃,使用floor函數、或cast函數取整數部分,然後用原來的數減去整數部分即可: www.2cto.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.2cto.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.2cto.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進行隱式轉換。