如何在Oracle中填充日历表?

时间:2011-12-04 11:26:52

标签: sql database oracle

我想在Oracle数据库中维护一个日历表,我希望从2011年到2013年的所有日期(可能是任何一年)填写。我怎么能这样做?

考虑我的数据库表有列,示例数据集是:

S.No  Cal_Dt      DayName 
1     01-01-2011  Monday
2     02-01-2011  Tuesday
3     03-01-2011  Wednesday

等等。

我只关注Cal_Dt(DayName是可选的)。

3 个答案:

答案 0 :(得分:12)

这是一种简单易行的方法

with calendar as (
        select :startdate + rownum - 1 as day
        from dual
        connect by rownum < :enddate - :startdate
    )
select rownum as "S.No", to_date(day,'dd_mm_yyyy') as "Cal_Dt", to_char(day,'day') as "DayName"
from calendar

答案 1 :(得分:2)

declare
  v_date date := to_date('20110101','yyyymmdd');
begin

   while v_date < sysdate + 720 loop

      insert into calender
      values ( v_date, to_char(v_date,'DAY'));

      v_date := v_date + 1;

   end loop;
   commit;

end;
/

这不是最佳做法,您应该使用Allesandro Rossi's solution。如果您使用的是Oracle 9i或更早版本并填充大型表,则才有用。

答案 2 :(得分:2)

with calendar as (
        select rownum - 1 as daynum
        from dual
        connect by rownum < sysdate - to_date('1-jan-2010') + 1
    )
select to_date('1-jan-2010') + daynum as monthdate
from calendar
;