oracle nvl2函數


nvl2(v1, v2, v3) 定義:如果v1為空,返回v3; 不為空,返回v2

nvl2要求v2,v3的類型一致,不一致會發生類型轉換。問題:最終返回值類型是v2的類型還是v3的類型?

看題目:nvl2(null,sysdate-(sysdate-1/24/60), sysdate) 最終返回的是什么類型?
如果做一下實驗,可能看得更明白一些:

select nvl2(1, sysdate-(sysdate-1/24/60), sysdate) from dual;
select nvl2(null,sysdate-(sysdate-1/24/60), sysdate) from dual;

select nvl2(1, sysdate, sysdate-(sysdate-1/24/60) from dual;
select nvl2(null, sysdate, sysdate-(sysdate-1/24/60) from dual;

select sysdate-1/24/60 from dual;

上面兩條語句正確執行,中間兩條語句報錯:ORA-00932:數據類型不一致:應為DATE,但卻獲得DATE JULIAN
下面是nvl2執行路徑:

結論:最終類型將會是v2類型
例子中帶了一個知識點,date可以隱式轉換成number類型,反之則不行。
date如果要手工轉成number則比較復雜,可以用to_char(sysdate, 'fm....')轉成字符,再to_number('2013-01-01', '9999G99G99', 'nls_numeric_characters=,-')


免責聲明!

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



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