程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2中進行sql除法運算結果為小數時顯示0的解決方案

DB2中進行sql除法運算結果為小數時顯示0的解決方案

編輯:DB2教程

在進行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進行非空判斷。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved