今天在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 ...