使用365天创建视图

Bis*_*han 4 oracle plsql date-arithmetic oracle11g

如何创建View一年中的所有日子.view应该填写从JAN-01到Dec-31的日期.我怎样才能在Oracle中执行此操作?

如果当前年份为365天,则view应该有365行日期.如果当年有366天,view应该有366行日期.我希望view有一个类型的列DATE.

APC*_*APC 11

这个简单的视图将做到这一点:

create or replace view year_days as
select trunc(sysdate, 'YYYY') + (level-1) as the_day
from dual
connect by level <= to_number(to_char(last_day(add_months(trunc(sysdate, 'YYYY'),11)), 'DDD'))
/
Run Code Online (Sandbox Code Playgroud)

像这样:

SQL> select * from year_days;

THE_DAY
---------
01-JAN-11
02-JAN-11
03-JAN-11
04-JAN-11
05-JAN-11
06-JAN-11
07-JAN-11
08-JAN-11
09-JAN-11
10-JAN-11
11-JAN-11

...

20-DEC-11
21-DEC-11
22-DEC-11
23-DEC-11
24-DEC-11
25-DEC-11
26-DEC-11
27-DEC-11
28-DEC-11
29-DEC-11
30-DEC-11
31-DEC-11

365 rows selected.

SQL> 
Run Code Online (Sandbox Code Playgroud)

通过应用多个Oracle日期函数生成日期:

  • trunc(sysdate, 'yyyy') 给了我们今年一月的第一个
  • add_months(x, 11) 给了我们12月的第一个
  • last_day(x) 给了我们十二月三十一日
  • to_char(x, 'DDD') 给我们12月31日的数字,今年的365和366.
  • 最后一个图提供了行生成器的上限 CONNECT BY LEVEL <= X