Oracle中NULL值不能用於計算。NULL與0不同,應當把NULL看作是一個未知值或無關的,NULL不能進行計算,所以所的結果永遠為NULL。
在某些情況下,我們可以對NULL值進行合理的假設,在進行計算時對其進行處理。
NVL:空值轉換函數
格式:NVL(value,substitute)
如果value為NULL,則函數等於substitute。如果value不為NULL,則函數等於value的值。注意substitute可以是一個數字、另一列或一個計算結果。
select NVL(age,18) from userInfo;
age為NULL返回18,否則返回age的值。
NVL不只限於數值,雖然它也能用於CHAR、VARCHAR2、DATE和其他數據類型,但是value和substitute必須為相同的數據類型。另外,只有在數據是未知的而不是無關的情況下,NVL才是有用的。
一個類似的函數是NVL2,它相對復雜一些。
格式:NVL2(expr1,expr2,expr3)
在NVL2中,expr1永遠不會被返回,返回值是expr2或expr3。如果expr1不為NULL,則NVL2返回expr2。如果expr1為NULL,則NVL2返回expr3。參數expr1可以是任意數據類型。參數expr2和 expr3可以是除LONG以外的任意數據類型。
對於BINARY_FLORT和BINARY_DOUBLE數據類型可以使用NANVL函數。NANVL接收兩個變量,並且當第1個變量不是數字時返回第2個變量。