oracle 日期运算1
--1、日期到字符操作
select to_char(sysdate,'yyyy-mm-dd') from dual;
/*
TO_CHAR(SYSDATE,'YYYY-MM-DD')
-----------------------------
2009-06-11
*/
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
/*
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS')
---------------------------------------
2009-06-11 14:30:26
*/
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
/*
TO_CHAR(SYSDATE,'YYYY-MM-DDHH:MI:SS')
-------------------------------------
2009-06-11 02:31:39
*/
--2、字符到日期操作
--很多时候都将日期保存成字符,如何将字符转换成日期?
select to_date('2009-06-25-21:15:37','YYYY-MM-DD-HH24:MI:SS') from dual;
/*
TO_DATE('2009-06-25-21:15:37','YYYY-MM-DD-HH24:MI:SS')
-------------------------
2009-6-25 21:15:37
*/
/*3、TRUNC、ROUND函数
格式:trunc(date,[fmt])
返回截取时间部分后的DATE,如果有fmt部分的设置,则返回与该部分最近的日期。
round(date,[fmt])
返回将日期date舍入后的DATE,如果有fmt部分的设置,则按照fmt指定的格式舍入返回DATE。
*/
--首先看看系统日期
select sysdate from dual;
--25-6月 -09
--返回当年第一天
select trunc(sysdate,'yyyy') from dual;
select round(sysdate,'yyyy') from dual;
--01-1月 -09
--返回当月第一天
select trunc(sysdate,'mm') from dual;
--01-6月 -09
select round(sysdate,'mm') from dual;
--01-7月 -09 四舍五入下个月的第一天
--通过add_months和trunc计算当月最后一天
select trunc(add_months(sysdate,1),'mm')-1 from dual;
--30-6月 -09
--返回当前星期的第一天.
select trunc(sysdate,'d') from dual;
--21-6月 -09 实际上这是周日。可以这样使用
select trunc(sysdate,'d')+1 from dual;
--22-6月 -09 这样就是周一了。
select round(sysdate,'d') from dual;
28-6月 -09 四舍五入到下周的第一天.
--本周周末的日期,假设周五是周末
select trunc(sysdate,'d')+5 from dual;
--26-6月 -09
--TRUNC数字函数返回处理后的数值,函数不做相应舍入选择处理,而统统截去。
select trunc(1.888,2) from dual;
--1.88
select trunc(1.888) from dual;
--1
select trunc(1.888,-1) from dual;
--0 第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。
--再来看看round
select round(19.888,-1) from dual;
--20
select round(13.888,-1) from dual;
--10