按照我的理解,您正在寻找行生成器。如果是这样,你在这里:
首先,一些设置(正如我的数据库所说克罗地亚语);你不会那样做的:
SQL> alter session set nls_date_format = 'dd.mm.yyyy, day';
Session altered.
SQL> alter session set nls_date_language = 'english';
Session altered.
查询自身,结果:
SQL> select trunc(sysdate, 'yyyy') + level - 1 as datum
2 from dual
3 connect by level <= next_day(trunc(sysdate) - 7, 'sunday') - trunc(sysdate, 'yyyy') + 1
4 order by datum;
DATUM
---------------------
01.01.2021, friday
02.01.2021, saturday
03.01.2021, sunday
04.01.2021, monday
05.01.2021, tuesday
06.01.2021, wednesday
07.01.2021, thursday
08.01.2021, friday
<snip>
09.06.2021, wednesday
10.06.2021, thursday
11.06.2021, friday
12.06.2021, saturday
13.06.2021, sunday
164 rows selected.
SQL>
如你所说:
所以即使我从今天开始两天后运行查询,我也只能获得从 1 月 1 日到上周日的数据?
让我们假设距离今天还有两天,即 2021 年 6 月 16 日(星期三)。我现在以特权用户身份连接,因此我可以更改系统的日期(你不会这样做):
SQL> alter system set fixed_date = '16.06.2021';
System altered.
SQL> alter session set nls_date_language = 'english';
Session altered.
SQL> alter session set nls_date_format = 'dd.mm.yyyy, day';
Session altered.
SQL> select sysdate from dual;
SYSDATE
---------------------
16.06.2021, wednesday
看到了吗?星期三。
让我们再次尝试相同的查询:
SQL> select trunc(sysdate, 'yyyy') + level - 1 as datum
2 from dual
3 connect by level <= next_day(trunc(sysdate) - 7, 'sunday') - trunc(sysdate, 'yyyy') + 1
4 order by datum;
DATUM
---------------------
01.01.2021, friday
02.01.2021, saturday
03.01.2021, sunday
04.01.2021, monday
<snip>
11.06.2021, friday
12.06.2021, saturday
13.06.2021, sunday
164 rows selected.
SQL>
我觉得不错。