db2相除等於零的處理方法 db2 相除等零

2021-05-21 17:48:40 字數 1414 閱讀 4452

今天在db2下寫sql的時候遇到了這樣的乙個問題,

【分享點1:】

select field1/field2 from tb;

當 field1的數值 > field2的數值時,除法得出的結果是<1的,即0.******

這個時候在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語句修改為:

?[copy to clipboard]view code sql1

select cast(field1 as double)/field2 from tb;

就是先把field1轉換成double型別的,這樣計算出來的就會得出小數點了,會顯示出0.******

【分享點2:】

額,接下來,需要對得出的小數點位數進行約束,那就用四捨五入吧,

?[copy to clipboard]view code sql1

select round(cast(field1 as double)/field2, 2) from tb;

這個意思就是說四捨五入,保留兩位小數點

【分享點三:】

但是如果field1或者field2有乙個欄位為null的話,那麼結果為null,這個時候根據邏輯需要進行如下的乙個操作,

如果資料列的值為null,將其設定為0,那麼sql就要這麼寫

?[copy to clipboard]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進行非空判斷。

好,就這麼多了,over。。。

DB2儲存過程的異常處理

1 自定義異常 declare condition for sqlstate 注 可以從7 9或t z開頭 2 異常捕捉 declare exit continue undo handler for 異常 sqlstate begin get diagnostics exception 1 sqle...

DB2去重的幾種方法

有兩個意義上的重覆記錄,一是完全重複的記錄,也即所有欄位均重複的記錄,二是部分關鍵字段重複的記錄,比如name欄位重複,而其他欄位不一定重複或都重複可以忽略。例如下表 table1 使用者辦理 的記錄表,可看出,user id 33333有兩條完全重複的記錄,user id 11111的tc nam...

DB2中REVERSE函式的實現方法

oracle sql select reverse 1234 from dual reverse 4321 sql select reverse 12121 from dual select revrgohpvdfvberse 12121 from dual 第 1 行出現錯誤 ora 00932 ...