在sql server中做除法處理的時候,我們經常需要處理除數為零的情況,因為如果遇到這種情況的時候,sqlserver會拋出遇到以零作除數錯誤的異常,我們總不希望把這個異常顯示給用戶吧。
做個會報這個錯誤的示例,如以下sql代碼:
declare @a int;
declare @b int;
set @a=10
set @b=0
select @a/@b
declare @b int;
set @a=10
set @b=0
select @a/@b
運行就會拋出遇到以零作除數錯誤的錯誤
本章主要講解一下如何在sql server處理除數為零的兩種方法:
一,利用case語句。
我們改寫上面的sql,當@b=0的時候,我們就返回1.改寫如下:
declare @a int; declare @b int; set @a=10 set @b=0 select case @b when 0 then 1 else @a/@b end
這樣寫當然是正確的,但顯的麻煩,下面我們看一下第二處理方法。
二,利用nullif函數。
nullif函數有兩個參數,定義如下:
NULLIF( expression , expression )
其作用就是:如果兩個指定的表達式相等,就返回null值。
看一示例:
select nullif(0,0)
運行結果:null
我們知道,null與任何數進行任何運算,其結果都等於null,利用這點,我們可以將上面的sql改寫為:
1 declare @a int; 2 declare @b int; 3 set @a=10 4 set @b=0 5 select @a/nullif(@b,0)
其運行結果自然為null了。
再利用isnull函數,我們就可以實現當@b=0的時候,結果返回1的需求了。最終的sql改寫如下:
declare @a int; declare @b int; set @a=10 set @b=0 select isnull(@a/nullif(@b,0),1)
OK,兩種方法介紹完畢,相對於方法一,我更推薦大家使用方法二,因為方法二的代碼更簡省。
(如果有朋友對isnull函數不了解的話,這里可以解釋一下。
isnull的定義如下:
isnull(參數1,參數2)
其作用就是,當參數1等於null時,就返回參數2的值。)
來源:.net學習網