您的位置:首页 > 其它

trunc和round函数

2013-06-30 12:12 351 查看
TRUNC函数用于对值进行截断。
用法有两种:TRUNC(NUMBER)表示截断数字,TRUNC(date)表示截断日期。
(1)截断数字:
格式:TRUNC(n1,n2),n1表示被截断的数字,n2表示要截断到那一位。n2可以是负数,表示截断小数点前。注意,TRUNC截断不是四舍五入。
SQL> select TRUNC(15.79) from dual;
TRUNC(15.79)
------------
15
SQL> select TRUNC(15.79,1) from dual;
TRUNC(15.79,1)
--------------
15.7
SQL> select trunc(15.79,-1) from dual;
TRUNC(15.79,-1)
---------------
10
(2)截断日期:
先执行命令:alter session set nls_date_format='yyyy-mm-dd hh24:mi:hh';
截取今天:
SQL> select sysdate,trunc(sysdate,'dd') from dual;
SYSDATE TRUNC(SYSDATE,'DD')
------------------- -------------------
2009-03-24 21:31:17 2009-03-24 00:00:00
截取本周第一天:
SQL> select sysdate,trunc(sysdate,'d') from dual;
SYSDATE TRUNC(SYSDATE,'D')
------------------- -------------------
2009-03-24 21:29:32 2009-03-22 00:00:00
截取本月第一天:
SQL> select sysdate,trunc(sysdate,'mm') from dual;
SYSDATE TRUNC(SYSDATE,'MM')
------------------- -------------------
2009-03-24 21:30:30 2009-03-01 00:00:00
截取本年第一天:
SQL> select sysdate,trunc(sysdate,'y') from dual;
SYSDATE TRUNC(SYSDATE,'Y')
------------------- -------------------
2009-03-24 21:31:57 2009-01-01 00:00:00
截取到小时:
SQL> select sysdate,trunc(sysdate,'hh') from dual;
SYSDATE TRUNC(SYSDATE,'HH')
------------------- -------------------
2009-03-24 21:32:59 2009-03-24 21:00:00
截取到分钟:
SQL> select sysdate,trunc(sysdate,'mi') from dual;
SYSDATE TRUNC(SYSDATE,'MI')
------------------- -------------------
2009-03-24 21:33:32 2009-03-24 21:33:00

获取上月第一天:
SQL> select TRUNC(add_months(SYSDATE,-1),'MM') from dual

一、数字作为参数

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;

一、用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'周五
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  小数点