Sql 如何在Oracle中填充日历表?
我想在Oracle DB中维护一个日历表,我想用从2011年到2013年的一年中的所有日期填充该表,可能一直到任何一年。我该怎么做 假设my DB表有列,示例数据集为:Sql 如何在Oracle中填充日历表?,sql,database,oracle,Sql,Database,Oracle,我想在Oracle DB中维护一个日历表,我想用从2011年到2013年的一年中的所有日期填充该表,可能一直到任何一年。我该怎么做 假设my DB表有列,示例数据集为: S.No Cal_Dt DayName 1 01-01-2011 Monday 2 02-01-2011 Tuesday 3 03-01-2011 Wednesday 等等 我更关心Cal_Dt,只是这里DayName是可选的 declare v_date date := to_
S.No Cal_Dt DayName
1 01-01-2011 Monday
2 02-01-2011 Tuesday
3 03-01-2011 Wednesday
等等
我更关心Cal_Dt,只是这里DayName是可选的
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或更早版本并填充大型表时,这才可能有用。这是一种简单易行的方法
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
如果我想从一年的第一天开始,而不是从sysdate开始,那么我想继续吗?@好极了,我已经编辑了它,这样你就可以在任何地方开始它。当在Oracle 11g中运行查询时,我得到一个错误ORA-00904:STARTDATE:无效标识符。输入日期格式为01012016。请帮助。您必须为您的特定情况使用有意义的值替换:startdate和:enddate。
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
;