Oralce中TRUNC和ROUND的区别

一、数字作为参数

Trunc(number[, 小数位数] :直接截取,不进行四舍五入等操作

Round(number[, 小数位数]:截取的同时,进行四舍五入操作。

小数位数:正数,0,负数

 

// 89.98 89.99
select trunc(89.985, 2), round(89.985, 2) from dual;

// 89.9 90
select trunc(89.985, 1), round(89.985, 1) from dual;

// 89.9 89.9
select trunc(89.945, 1), round(89.945, 1) from dual;

// 89 90
select trunc(89.985, 0), round(89.985, 0) from dual;

// 89 90
select trunc(89.985), round(89.985) from dual;

// 80 90
select trunc(89.985, -1), round(89.985, -1) from dual;

// 0 100
select trunc(89.985, -2), round(89.985, -2) from dual;

 

二、时间作娄参数

 

官方两个网页:

http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/functions218.htm

 

http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/functions253.htm#i1002084

 

第一个网页我想说明的是用法,第二个网页就是区别了。

 

Trunc(date[, fmt]), Round(date[, fmt])

 

格式默认为日期,即为dd。

格式可以为:年,月,日,时,分,没有秒。

 

Trunc也是直接截取,不往高们加1操作(类似四舍五入);

Round就有可能加1了,当:

    时间的月超过了7月1日,则年加1;

    时间的日超过了16号,则月加1;

    其它的不加。

 

select trunc(to_date('20100715-10:15:17', 'YYYYMMDD-HH24:MI:SS'), 'MM'),
       round(to_date('20100715-10:15:17', 'YYYYMMDD-HH24:MI:SS'), 'MM')
from dual;
select trunc(to_date('20100716-10:15:17', 'YYYYMMDD-HH24:MI:SS'), 'MM'),
       round(to_date('20100716-10:15:17', 'YYYYMMDD-HH24:MI:SS'), 'MM')
from dual;
select trunc(to_date('20100616-10:15:17', 'YYYYMMDD-HH24:MI:SS'), 'YYYY'),
       round(to_date('20100616-10:15:17', 'YYYYMMDD-HH24:MI:SS'), 'YYYY')
from dual;
select trunc(to_date('20100716-10:15:17', 'YYYYMMDD-HH24:MI:SS'), 'YYYY'),
       round(to_date('20100716-10:15:17', 'YYYYMMDD-HH24:MI:SS'), 'YYYY')
from dual;

select trunc(sysdate,'yyyy'), round(sysdate, 'yyyy') from dual;
select trunc(sysdate,'mm'), round(sysdate,'mm') from dual;
select trunc(sysdate,'dd'), round(sysdate,'dd') from dual;
select trunc(sysdate,'HH24'), round(sysdate,'HH24') from dual;
select trunc(sysdate,'MI'), round(sysdate,'MI') from dual;

 

 

·ROUND(d[,fmt])   

    将日期d按照fmt指定的格式舍入,fmt为字符串。  
  例如:     round(to_date('20030105','yyyymmdd'),'yyyy')='01-1月   -03'  
                  round(to_date('20030805','yyyymmdd'),'yyyy')='01-1月   -04'  
   
    ·TRUNC(d[,fmt])    
    返回由fmt指定的单位的日期d.    
  例如:     TRUNC(to_date('20030105','yyyymmdd'),'yyyy')='01-1月   -03'  
                  TRUNC(to_date('20030805','yyyymmdd'),'yyyy')='01-1月   -03'  
   
  SQL>   SELECT   ROUND(TO_DATE('2005-12-28','YYYY-MM-DD'),'YYYY')   FROM   DUAL;  
   
  ROUND(TO_DATE('20  
  -----------------  
  20060101   00:00:00  
   
  SQL>   SELECT   TRUNC(TO_DATE('2005-12-28','YYYY-MM-DD'),'YYYY')   FROM   DUAL;  
   
  TRUNC(TO_DATE('20  
  -----------------  
  20050101   00:00:00

 

 

oracle的trunc与round处理日期和数值的区别

oracle的

trunc(date,[fmt])   

  解释:返回截取时间部分后的DATE,如果有fmt部分的设置,则返回与该部分最近的日期。

round(date,[fmt])   

  解释:返回将日期date舍入后的DATE,如果有fmt部分的设置,则按照fmt指定的格式舍入返回DATE。   

 

                  

一、用trunc函数处理日期

 日期用例 '2008-11-28 12:59:59'周五  

1.没有fmt部分时

   语句: SELECT   TRUNC(TO_DATE('2008-11-28 12:00:01','YYYY-MM-DD hh24:mi:ss')) FROM   DUAL;

          结果: 2008-11-28  

        

2.得到最当前日期之前的最近的一个周日的日期

   语句: SELECT   TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD hh24:mi:ss'),'D') FROM   DUAL;   

   结果: 2008-11-23 周日

   语句: SELECT   TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD hh24:mi:ss'),'D')+1 FROM   DUAL;   

   结果: 2008-11-24 周一

 

3.得到最当前日期的所在月份的第一天

   语句: SELECT   TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD hh24:mi:ss'),'MM') FROM   DUAL;   

   结果: 2008-11-1

   语句: SELECT   TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD hh24:mi:ss'),'MM')-1 FROM   DUAL; 

   结果: 2008-10-31

 

4.得到最当前日期的所在年份的第一天

   语句: SELECT   TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD hh24:mi:ss'),'Y') FROM   DUAL;   

   结果: 2008-1-1

   语句: SELECT   TRUNC(TO_DATE('2008-11-28 12:59:59','YYYY-MM-DD hh24:mi:ss'),'Y')-1 FROM   DUAL; 

   结果: 2007-12-31

 

二、用round函数处理日期

 日期用例 '2008-11-28 11:59:59'周五

              '2008-11-28 12:00:00'周五

              '2008-11-28 11:59:59'周五

              '2008-11-28 11:59:59'周五

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值