oracle nvl,nvl2, nullif,以及类型强转函数cast

 参考博客

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

 

官方文档 OLD:https://docs.oracle.com/database/121/SQLRF/functions131.htm#SQLRF00684

官方文档 NEW:https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NVL.html#GUID-3AB61E54-9201-4D6A-B48A-79F4C4A034B2

 

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 

 

 

 

 

 

 

 

posted @ 2023-03-13 15:45  He_LiangLiang  阅读(55)  评论(0编辑  收藏  举报