Как заполнить календарную таблицу в Oracle? - PullRequest
5 голосов
/ 04 декабря 2011

Я хочу вести таблицу календаря в базе данных 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 ]

13 голосов
/ 04 декабря 2011

Это простой и легкий способ сделать это

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
2 голосов
/ 01 мая 2013
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
;
2 голосов
/ 04 декабря 2011
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;
/

Это не лучшая практика, и вам следует использовать решение Аллесандро Росси .Это может только быть полезным, если вы используете Oracle 9i или более раннюю версию и заполняете большую таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...