--获取两时间月份差 select (EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) - EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd'))) * 12 + EXTRACT(month FROM to_date('2008-05-01','yyyy-mm-dd')) - EXTRACT(month FROM to_date('2008-04-30','yyyy-mm-dd')) months from dual; /* MONTHS ---------- 13 1 row selected */select * from tb where (EXTRACT(year FROM to_date(getdate,'yyyy-mm-dd')) - EXTRACT(year FROM to_date(dt,'yyyy-mm-dd'))) * 12 + EXTRACT(month FROM to_date(getdate,'yyyy-mm-dd')) - EXTRACT(month FROM to_date(dt,'yyyy-mm-dd')) months = 3
参考: http://jorkin.reallydo.com/article.asp?id=529
SQL> select add_months(sysdate, -3) from dual;ADD_MONTHS(SYSDATE, ------------------- 2008-12-02 12:07:40
各位,我不是说要获取某一个日期,也不是要比较两个时间的日期差,我是要获取当前日期的三个月前的所有日期,比如以下为获取当天日期 @echo off set mmdd=%date:~5,2%%date:~8,2% set mm=%date:~5,2% 我这里每天都有历史表,比如t_0101test,t_0102test,我就是把这些表给列出来,就是要把0101,0102之类的变量日期给获取出来,呵呵。
--获取两时间月份差
select (EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) - EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd'))) * 12 +
EXTRACT(month FROM to_date('2008-05-01','yyyy-mm-dd')) - EXTRACT(month FROM to_date('2008-04-30','yyyy-mm-dd')) months
from dual;
/*
MONTHS
----------
13
1 row selected
*/select * from tb
where (EXTRACT(year FROM to_date(getdate,'yyyy-mm-dd')) - EXTRACT(year FROM to_date(dt,'yyyy-mm-dd'))) * 12 +
EXTRACT(month FROM to_date(getdate,'yyyy-mm-dd')) - EXTRACT(month FROM to_date(dt,'yyyy-mm-dd')) months = 3
http://jorkin.reallydo.com/article.asp?id=529
SQL> select add_months(sysdate, -3) from dual;ADD_MONTHS(SYSDATE,
-------------------
2008-12-02 12:07:40
@echo off
set mmdd=%date:~5,2%%date:~8,2%
set mm=%date:~5,2%
我这里每天都有历史表,比如t_0101test,t_0102test,我就是把这些表给列出来,就是要把0101,0102之类的变量日期给获取出来,呵呵。
Wrote file afiedt.buf 1 declare
2 l_date date;
3 begin
4 l_date := trunc(add_months(sysdate,-&month));
5 while (l_date <= trunc(sysdate) )
6 loop
7 dbms_output.put_line(l_date);
8 l_date := l_date + 1;
9 end loop;
10* end;
SQL> /
Enter value for month: 1
old 4: l_date := trunc(add_months(sysdate,-&month));
new 4: l_date := trunc(add_months(sysdate,-1));
2009-02-02 00:00:00
2009-02-03 00:00:00
2009-02-04 00:00:00
2009-02-05 00:00:00
2009-02-06 00:00:00
2009-02-07 00:00:00
2009-02-08 00:00:00
2009-02-09 00:00:00
2009-02-10 00:00:00
2009-02-11 00:00:00
2009-02-12 00:00:00
2009-02-13 00:00:00
2009-02-14 00:00:00
2009-02-15 00:00:00
2009-02-16 00:00:00
2009-02-17 00:00:00
2009-02-18 00:00:00
2009-02-19 00:00:00
2009-02-20 00:00:00
2009-02-21 00:00:00
2009-02-22 00:00:00
2009-02-23 00:00:00
2009-02-24 00:00:00
2009-02-25 00:00:00
2009-02-26 00:00:00
2009-02-27 00:00:00
2009-02-28 00:00:00
2009-03-01 00:00:00
2009-03-02 00:00:00PL/SQL procedure successfully completed.
SQL>