【SQL】避免SQL除以零的錯誤

此篇文章本來在巴哈及舊網站發表,但舊網站即將停止使用所以搬到這邊來做紀錄!

====================

前陣子在用SQL計算一些算式時發生了除以0的錯誤

後來GOOGLE一下發現可以用NULLIF跟ISNULL函式來避免
趕快做個筆記免得以後又忘記
===================================================
首先如果輸入SELECT 1 + 2 + 3 / 0
會發生除以零的錯誤
 
這時候不想用程式寫try catch來判斷例外
就決定從SQL下手
將算式改寫成SELECT 1 + 2 + ISNULL(3/NULLIF(0, 0), 0)
 
 
分成兩部分說明:
運用NULLIF方法 NULLIF(a, b)
代表如果a=b, 那值就是null,否則值是a
 
再使用ISNULL方法 ISNULL(a, b)
如果a是null,值就是b,不然值=a
 
 
所以最後將算式從SELECT 1 + 2 + 3 / 0
變成SELECT 1 + 2 + ISNULL(3/NULLIF(0, 0), 0)
就是先在除數的地方用NULLIF判斷是否為0,如果除數為0就讓值等於NULL
外面再用ISNULL包起來,如果值等於NULL就換成預設的值
因為SQL可以除以NULL而不能除以0
所以可用此方法避免

新增評論