一、数字作为参数
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'周五