Oracle 日期运算 集合

--1、oracle 日期加减


select sysdate,add_months(sysdate,12) from dual;  --日期加一年
/*SYSDATE                   ADD_MONTHS(SYSDATE,12)  
------------------------- -------------------------
25-6月 -09                25-6月 -10              
*/
select sysdate,add_months(sysdate,1) from dual;   --日期加一月
/*
SYSDATE                   ADD_MONTHS(SYSDATE,1)   
------------------------- -------------------------
25-6月 -09                25-7月 -09              
*/
select sysdate,sysdate+1 from dual;               --日期加一天
/*
SYSDATE                   SYSDATE+1               
------------------------- -------------------------
25-6月 -09                26-6月 -09              
*/
select to_char(sysdate,'YYYY-MM-dd hh24:mi:ss') oldtime,
to_char(sysdate+1/24,'YYYY-MM-dd hh24:mi:ss') newtime
from dual;                                        --时间加一个小时
/*
OLDTIME             NEWTIME           
------------------- -------------------
2009-06-25 16:04:23 2009-06-25 17:04:23
*/
select to_char(sysdate,'YYYY-MM-dd hh24:mi:ss') oldtime,
to_char(sysdate+1/24/60,'YYYY-MM-dd hh24:mi:ss') newtime
from dual;                                        --时间加一分钟
/*
OLDTIME             NEWTIME           
------------------- -------------------
2009-06-25 16:06:13 2009-06-25 16:07:13
*/
select to_char(sysdate,'YYYY-MM-dd hh24:mi:ss') oldtime,
to_char(sysdate+1/24/60/60,'YYYY-MM-dd hh24:mi:ss') newtime
from dual;                                        --时间加一秒钟
/*
OLDTIME             NEWTIME           
------------------- -------------------
2009-06-25 16:07:28 2009-06-25 16:07:29
*/
--减法就就把响应的+换成减-就行了。
--2、连个日期的差
--两个日期差的天数
select to_date('2009-06-26','yyyy-mm-dd')-to_date('2009-01-01','yyyy-mm-dd') ts from dual;
/*
TS                   
----------------------
176
*/
--两个日期差的月数
select months_between(to_date('2009-07-01','yyyy-mm-dd'),to_date('2009-01-01','yyyy-mm-dd')) ys from dual;
/*
YS                   
----------------------
6
*/
--两个日期差的年数,使用相差的月数除以12
select (months_between(to_date('2009-07-01','yyyy-mm-dd'),to_date('2009-01-01','yyyy-mm-dd')))/12 ys from dual;
/*
YS                   
----------------------
0.5
*/
--2、其它
--求每个月最后一天,上篇文章介绍了一个方法:
select trunc(add_months(sysdate,1),'mm')-1 from dual;
--30-6月 -09
--其实oracle 提供了相应的函数last_day
select last_day(sysdate) from dual;
/*
LAST_DAY(SYSDATE)       
-------------------------
30-6月 -09   
*/
select last_day(to_date('2008-03-01','yyyy-mm-dd')) from dual;
/*
LAST_DAY(TO_DATE('2008-03-01','YYYY-MM-DD'))
-------------------------
31-3月 -08    
*/
--求每个月的第一天,上篇文章介绍了一个方法:
select trunc(sysdate,'mm') from dual;
--01-6月 -09
--我们也使用LAST_DAY和函数实现:求上一个月的最后一天然后再在加一天,就是当月的第一天
select last_day(add_months(sysdate,-1))+1 fd from dual;
/*
FD                      
-------------------------
01-6月 -09     
*/
--next_day用法:使用中文标示工作日
select next_day(sysdate,'星期五') "下周五" from dual;
/*
下周五                     
-------------------------
03-7月 -09 
*/
--使用数字标示工作日:1表示的是周日,2表示的是周一,3表示的是周二,依此类推。
select next_day(sysdate,6) "下周五" from dual;
/*
下周五                     
-------------------------
03-7月 -09 
*/

类别:数据库 查看评论
原文地址:https://www.cnblogs.com/tiandi/p/1972536.html