oracle nvl,nvl2, nullif,以及類型強轉函數cast

 參考博客

 https://www.cnblogs.com/xielong/p/9285147.html

 

SELECT 
0 AS t1 ,
1 AS t2, 
1.123456 AS t3,
NULL AS t4,
round((1234.123456- null )*100/nvl(0.1,1),2) t5,
nvl(round((1234.123456 - 0 )*100/nullif(10,1),2), 1.123456) t6 ,
CAST (nvl(round((1234.123456 - 0 )*100/nullif(10,1),2), 1.123456) AS NUMBER(9,2)) t7,

--NVL(expr1,expr2),若expr1爲null, 返回expr2; 不爲null,返回expr1。  注意:兩者類型要一致
nvl(null, 0.1234) AS t8,

--NVL2 (expr1, expr2, expr3),若expr1不爲NULL,返回expr2 ;爲NULL,返回expr3。注意:expr2 和expr3 類型不同的話,expr3 會轉換爲expr2 的類型
nvl2(0,1,2) AS t10,  

--NULL .NULLIF (expr1, expr2),若expr1和expr2相等,返回NULL;不相等,等返回expr1
nullif(1.123,1.123) AS t9

FROM  upcenter.stk_basic_info WHERE rownum<=10;

 

--NVL(expr1,expr2),若expr1爲null, 返回expr2; 不爲null,返回expr1。 注意:兩者類型要一致

nvl(null, 0.1234) AS t8,

 

--NVL2 (expr1, expr2, expr3),若expr1不爲NULL,返回expr2 ;爲NULL,返回expr3。注意:expr2 和expr3 類型不同的話,expr3 會轉換爲expr2 的類型

nvl2(0,1,2) AS t10,

 

--NULL .NULLIF (expr1, expr2),若expr1和expr2相等,返回NULL;不相等,等返回expr1

nullif(1.123,1.123) AS t9

 

 

 

這裏T6返回的類型是Number(38,0)  但是結果卻打印的是浮點數。oracle 此處返回的數據類型是不可靠的。

 

 

所以,遇到這種數據類型不可靠的情況,需要強制指定 數據類型。

使用 cast    as 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章