oracle中的nvl(), nvl2()函數


nvl()函數是oracle/plpgsql中的一個函數,格式為:nvl(string1, replace_with)

功能:如果string1 位null,那么nvl()函數返回replace_with的值,否則返回sting1的值。

注意:sting1和replace_with必須是同一數據類型,除非顯示的適用to_char函數。

例子:

nvl(to_char(some_numeric),’some string’)    --其中some_numeric指某個數據類型的值。

例如:

nvl(yan,0)>0

nvl(yan,0) 的意思是如果yan是null, 則取0值。

通過查詢獲得某個字段的合計值,如果這個值為null,則給出一個預設的 默認值(此處為0,也可以設置為其他值)。

例如:

select nvl(sum(t.dwx),1) from tb t ;

就表示如果sum(t.dwx) = null就返回1。

還有另一種有關的有用的方法:

Declare i integer

Select nvl(sum(t.dwx),1) into i from tb t where zx = -1;

以上把獲得的合計值存儲到變量i中,如果查詢的值為Null就把它的值設置為1。

其他用法舉例如下:

select nvl(rulescore,0) from zwjc_graderule where rulecode='FWTD';     --如果記錄中不存在rulecode ='FWTD'的數據.則查不出數據.

 select nvl(rulescore,0) into rule_score from zwjc_graderule where rulecode='FWTD';   --會報查不到數據的錯

 select nvl(sum(rulescore),0) from zwjc_graderule where rulecode='FWTD';   --如果記錄中不存在rulecode ='FWTD'的數據.還是可以得到一行列名為nvl(rulescore,0),值為0的數據.
 
 
nvl()的擴展-nvl2()

   Oracle在nvl()函數的功能上擴展,提供了nvl2()函數。

   nvl2()(E1, E2, E3)的功能為:如果E1為NULL,則函數返回E3,若E1不為null,則返回E2。

 

 

 

 

---------

 

本系列為最近一段時間學習oracle的學習筆記,記錄於此作為自身回顧,其中有的來的網絡,有的來的書籍,但時間已久,記不清哪些是引用,如是轉載但沒標注出,特意致歉。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM