`
hongzhguan
  • 浏览: 270385 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oracle中日期运算

阅读更多
--获取系统的时间
select sysdate from dual;

--ceil()向上1取整
--floor()向下取整

--得到相差的天数
select (to_date('2012-10-1','YYYY-MM-DD')-to_date('2011-9-11','YYYY-MM-DD')) from dual;
--得到相差的年份===使用相差的月数除以12
select floor(months_between(sysdate,to_date('2010-02-02','yyyy-mm-dd'))/12) from dual;
--得到相差的月=====第一个时间大才能为正
select floor(months_between(sysdate,to_date('2011-9-01','YYYY-MM-DD'))) from dual;



--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 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  
*/
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics