ROUND(x,y)与TRUNC(x,y)函数中y参数值为省略、空值与null的区别

----ROUND(x,y)TRUNC(x,y)函数中y参数值为省略、空值与null的区别:

sys@PROD>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

 

---函数的结构:

ROUND(x,y):以小数点后Y位(或Y日期格式)四舍五入取X的值。

TRUNC(x,y):以小数点后Y位(或Y日期格式)截断取X的值。

#两个函数同时适用于处理日期类型与数字类型的数据。

 

---使用函数查询日期数据类型:

sys@PROD>select round(sysdate),round(sysdate,'dd'),

  2  trunc(sysdate),trunc(sysdate,'dd')

  3  from dual;

ROUND(SYSDATE)      ROUND(SYSDATE,'DD') TRUNC(SYSDATE)      TRUNC(SYSDATE,'DD')

------------------- ------------------- ------------------- -------------------

2016-12-14 00:00:00 2016-12-14 00:00:00 2016-12-13 00:00:00 2016-12-13 00:00:00


 ---使用函数查询数字数据类型: 

sys@PROD>select round(3,14159),round(3.14159,0),

  2  trunc(3,14159),trunc(3.14159,0)

  3   from dual;

 

ROUND(3,14159) ROUND(3.14159,0) TRUNC(3,14159) TRUNC(3.14159,0)

-------------- ---------------- -------------- ----------------

             3                3              3                3

#通过这一组查询,可以看到省略y值得情况下,相当于数字类型的以个位数四舍五入,

相当于日期类型的以dd”格式取舍。

 

---将函数中的y参数值设置为’’ :

sys@PROD>select round(sysdate,''),round(3.14159,''),

  2  trunc(sysdate,''),trunc(3.14159,'')

  3  from dual;

ROUND(SYSDATE,'')   ROUND(3.14159,'') TRUNC(SYSDATE,'')   TRUNC(3.14159,'')

------------------- ----------------- ------------------- -----------------

 

#均为空值。

---将函数中的y参数值设置为null :

sys@PROD>select round(sysdate,null), round(3.14159,null),

  2  trunc(sysdate,null),trunc(3.14159,null)

  3  from dual;

ROUND(SYSDATE,NULL) ROUND(3.14159,NULL) TRUNC(SYSDATE,NULL) TRUNC(3.14159,NULL)

------------------- ------------------- ------------------- -------------------

 

#均为空值。

---拓展查询:

--以世纪为取舍单位:

sys@PROD>select round(sysdate,'cc') from dual;

ROUND(SYSDATE,'CC')

-------------------

2001-01-01 00:00:00

 

--以季度为取舍单位:

sys@PROD>select round(to_date('2016-08-16 14:31:48','yyyy-mm-dd hh24:mi:ss'),'q') from dual;

ROUND(TO_DATE('2016

-------------------

2016-10-01 00:00:00

 

--以任意字符为取舍依据:

sys@PROD>select round(3.14159,'/') from dual;

select round(3.14159,'/') from dual

                     *

ERROR at line 1:

ORA-01722: invalid number

#报错,不能识别这种数据类型。

 

--以小数点后222位取舍:

sys@PROD>select round(3.14159,222) from dual;

ROUND(3.14159,222)

------------------

           3.14159

 

--以小数点前10位取舍:

sys@PROD>select round(333.14159,-10) from dual;

ROUND(333.14159,-10)

--------------------

                   0

--总结来说:

ROUND(x,y):以小数点后Y位(或Y日期格式)四舍五入取X的值。

TRUNC(x,y):以小数点后Y位(或Y日期格式)截断取X的值。
ROUND(x,y)中的y参数,对于数字类型,正数为小数点右边y位,负数为小数点左边y位,进行四舍五入
对于日期类型,是以y为取舍单位进行四舍五入;
TRUNC(x,y)中的y参数,对于数字类型,正数为小数点右边y位,负数为小数点左边y位,进行截取取值;
对于日期类型,是以y为取舍单位进行截取取值。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31392094/viewspace-2130393/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31392094/viewspace-2130393/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值