当前位置:文章写作网 >日记 >日记 >oracle 日期运算2

oracle 日期运算2

2009-06-26 11:33 作者:tshfang 阅读量:10376 推荐18次 | 我要投稿

--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

*/

--关于日期的用法就写到这里了。大家有什么好的方法互相交流。

其他人在看啥

    《oracle 日期运算2》的评论 (共 0 条)

    • 黑色星期五::ding不知道有几个人能看懂!但还是支持!
    • 小月:饿看不懂。:han
    • 海茵:有市场就有价值。:)
    • 叶寒如雪:天书……
    • Guest:請問,我要找到sysdate+1.5個月之後的日期,應該要怎麼寫好呢??
    • Guest:請問,我要找到sysdate+1.5個月之後的日期,應該要怎麼寫好呢??
    • Guest::yunsi
    • Guest:很好!赞一个。
    • 临江月::shy
    • 临江月::shy
    • Guest::manfen