Chế độ xem đơn giản này sẽ làm được điều đó:
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'))
/
Như thế này:
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>
Ngày được tạo bằng cách áp dụng một số hàm ngày của Oracle:
-
trunc(sysdate, 'yyyy')
cho chúng ta ngày đầu tiên của tháng 1 cho năm hiện tại -
add_months(x, 11)
mang đến cho chúng ta ngày đầu tiên của tháng 12 -
last_day(x)
mang đến cho chúng ta ngày 31 tháng 12 -
to_char(x, 'DDD')
cho chúng ta số 31 của tháng 12, 365 trong năm nay và 366 tiếp theo. - Hình cuối cùng này cung cấp giới hạn trên cho trình tạo hàng
CONNECT BY LEVEL <= X