掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流
在進行sql除法運算時,在DB2的環(huán)境下SELECT出來的值是0,這應該如何處理呢?本文將為您介紹DB2中進行sql除法運算結果為小數(shù)時顯示0問題的兩種解決方法,供您參考。

我們提供的服務有:成都網(wǎng)站設計、網(wǎng)站建設、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、滎經(jīng)ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的滎經(jīng)網(wǎng)站制作公司
SELECT field1/field2 FROM TB;
當 field1的數(shù)值 > field2的數(shù)值時,除法得出的結果是<1的,即0.xxxxxx
這個時候在DB2的環(huán)境下SELECT出來的值是0
這個有兩個解決方法
方法1:
DB CFG的一個參數(shù)MIN_DEC_DIV_3,這個參數(shù)在GET DB CFG FOR DB中并不會列出,但卻可以修改。
數(shù)據(jù)庫配置參數(shù)MIN_DEC_DIV_3會更改涉及小數(shù)的十進制算術運算的結果小數(shù)位。
默認值為No,則小數(shù)位計算為 31-p+s-s'。
如果設置為Yes,則小數(shù)位計算為 MAX(3, 31-p+s-s')。
這會導致十進制小數(shù)部分始終至少具有3位的小數(shù)位。精度始終為31。
這個方法貌似需要通過DBA對數(shù)據(jù)庫進行設置,不太靠譜兒,有另外一種方法可以曲線救國,登場:
將sql語句修改為:
View Code SQL1
SELECT CAST(field1 AS DOUBLE)/field2 FROM TB;
就是先把field1轉換成DOUBLE類型的,這樣計算出來的就會得出小數(shù)點了,會顯示出0.xxxxxx
接下來,需要對得出的小數(shù)點位數(shù)進行約束,那就用四舍五入吧,
View Code SQL1
SELECT ROUND(CAST(field1 AS DOUBLE)/field2, 2) FROM TB;
這個意思就是說四舍五入,保留兩位小數(shù)點
但是如果field1或者field2有一個字段為NULL的話,那么結果為NULL,這個時候根據(jù)邏輯需要進行如下的一個操作,
如果數(shù)據(jù)列的值為NULL,將其設置為0,那么sql就要這么寫
View Code SQL1
SELECT ROUND(COALESCE(CAST(field1 AS DOUBLE), 0)/field2, 2) FROM TB;
COALESCE這個函數(shù)系統(tǒng)的用法如下:
a. 輸入?yún)?shù)為字符類型,且允許為空的,可以使用COALESCE(inputParameter,”)把NULL轉換成”;
b. 輸入類型為整型,且允許為空的,可以使用COALESCE(inputParameter,0),把空轉換成0;
c. 輸入?yún)?shù)為字符類型,且是非空非空格的,可以使用COALESCE(inputParameter,”)把NULL轉換成”,然后判斷函數(shù)返回值是否為”;
d. 輸入類型為整型,且是非空的,不需要使用COALESCE函數(shù),直接使用IS NULL進行非空判斷。

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流