1. 程式人生 > >DB2資料庫學習總結(一)——round函式用法

DB2資料庫學習總結(一)——round函式用法

DB2資料庫需要用到兩個函式實現四捨五入,分別是:CAST、round round函式本身就是實現四捨五入,為什麼還要用CAST函式? 案例講解: 建立一張測試表用於模擬四捨五入的情景。對於金額欄位一般將型別定義為DECIMAL(xx,2)保留兩位小數。

CREATE TABLE TEST1(
 money DECIMAL(31,2)
);
INSERT INTO TEST1 VALUES (23.44);
模擬:對金額計算後的結果四捨五入,23.44/5 = 4.688, 四捨五入後 = 4.69
SELECT 
round(23.44/5,2) AS MONEY1, 
round(t.MONEY/5,2) AS MONEY2,
round(CAST(t.MONEY AS DECIMAL(31,3))/5 ,2)  AS MONEY3,
CAST(round(CAST(t.MONEY AS DECIMAL(31,3))/5 ,2) AS DECIMAL(31,2)) AS MONEY4
FROM TEST1 t;

輸出結果: 解析: MONEY1:DB2首先計算23.44/5 = 4.688,DB2自動將4.688格式化為DECIMAL(31,29),然後再round(4.688,2) = 4.69 MONEY2:DB2首先計算t.MONEY/5 = 4.68,計算結果實為4.688,但計算過程中產生了型別格式化,DB2自動將結果匹配為MONEY欄位型別DECIMAL(31,2)產生了小數位截斷的情況,然後再round(4.68,2) = 4.68 (單用round函式未達到預期的結果)MONEY3:CAST(t.MONEY AS DECIMAL(31,3))將MONEY型別擴充套件為保留3位小數,計算CAST(t.MONEY AS DECIMAL(31,3))/5 = 4.688 ,然後再round(4.688,2) = 4.69  (推薦方法)

MONEY4:實際上是對MONEY3結果的再次格式化,方便將結果寫入到其它表中,所以再次將結果進行格式化為DECIMAL(31,2) 總結:在資料庫中進行四捨五入前,防止產生小數截斷的情況,需要使用CAST先將欄位型別進行擴充套件,然後再計算。 這就是為什麼要使用CAST函數了!