获取当前 Week/Month 日期
Get Current Week/Month Dates
我想让函数获取本周的日期。我将传递周开始日期编号 dynamically.Week 开始日期可以 change.It 可以是星期日或星期一或任何 day.I 应该能够动态传递周开始日期编号。
如果我调用函数 GetCurrentWeekDates(weekStartDay NUMBER,callingday Date),我应该得到如下结果
GetCurrentWeekDates(1,'10/04/2022') --1 是星期日
结果应该如下
10/04/2022
11/04/2022
12/04/2022
13/04/2022
14/04/2022
15/04/2022
16/04/2022
并且当 GetCurrentWeekDates(1,11/04/2022) --1 是星期日时
结果应该如下
11/04/2022
12/04/2022
13/04/2022
14/04/2022
15/04/2022
16/04/2022
并且当 GetCurrentWeekDates(1,'14/04/2022') --1 是星期日时
结果应该如下
14/04/2022
15/04/2022
16/04/2022
同样
我想制作一个函数来获取当月的日期。我将动态传递月份数
如果我调用函数 GetCurrentMonthDates(monthNumber NUMBER,callingday Date),我应该得到如下结果
GetCurrentMonthDates(4,'01/04/2022') 4 是四月
结果应该如下
01/04/2022
02/04/2022
.
.
30/04/2022
GetCurrentMonthDates(4,'16/04/2022') 4 是四月
结果应该如下
16/04/2022
17/04/2022
.
.
30/04/2022
这里有一个周选项;我会让你自己写 month 函数(应该不会太难,既然你知道怎么做了)。
SQL> create or replace function f_week (par_start_day in varchar2, par_datum in date)
2 return sys_refcursor
3 is
4 -- PAR_START_DAY: mon, tue, ..., sat, sun
5 rc sys_refcursor;
6 begin
7 open rc for
8 select par_datum + level - 1
9 from dual
10 connect by level <= next_Day(par_datum, par_start_day) - par_datum;
11 return rc;
12 end;
13 /
Function created.
测试:
SQL> select f_week('sun', date '2022-04-10') from dual;
F_WEEK('SUN',DATE'20
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
:B1+LEVEL-1
---------------
10.04.2022, sun
11.04.2022, mon
12.04.2022, tue
13.04.2022, wed
14.04.2022, thu
15.04.2022, fri
16.04.2022, sat
7 rows selected.
更多测试:
SQL> select f_week('sun', date '2022-04-14') from dual;
F_WEEK('SUN',DATE'20
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
:B1+LEVEL-1
---------------
14.04.2022, thu
15.04.2022, fri
16.04.2022, sat
SQL>
我想让函数获取本周的日期。我将传递周开始日期编号 dynamically.Week 开始日期可以 change.It 可以是星期日或星期一或任何 day.I 应该能够动态传递周开始日期编号。
如果我调用函数 GetCurrentWeekDates(weekStartDay NUMBER,callingday Date),我应该得到如下结果
GetCurrentWeekDates(1,'10/04/2022') --1 是星期日
结果应该如下
10/04/2022
11/04/2022
12/04/2022
13/04/2022
14/04/2022
15/04/2022
16/04/2022
并且当 GetCurrentWeekDates(1,11/04/2022) --1 是星期日时
结果应该如下
11/04/2022
12/04/2022
13/04/2022
14/04/2022
15/04/2022
16/04/2022
并且当 GetCurrentWeekDates(1,'14/04/2022') --1 是星期日时
结果应该如下
14/04/2022
15/04/2022
16/04/2022
同样
我想制作一个函数来获取当月的日期。我将动态传递月份数
如果我调用函数 GetCurrentMonthDates(monthNumber NUMBER,callingday Date),我应该得到如下结果
GetCurrentMonthDates(4,'01/04/2022') 4 是四月
结果应该如下
01/04/2022
02/04/2022
.
.
30/04/2022
GetCurrentMonthDates(4,'16/04/2022') 4 是四月
结果应该如下
16/04/2022
17/04/2022
.
.
30/04/2022
这里有一个周选项;我会让你自己写 month 函数(应该不会太难,既然你知道怎么做了)。
SQL> create or replace function f_week (par_start_day in varchar2, par_datum in date)
2 return sys_refcursor
3 is
4 -- PAR_START_DAY: mon, tue, ..., sat, sun
5 rc sys_refcursor;
6 begin
7 open rc for
8 select par_datum + level - 1
9 from dual
10 connect by level <= next_Day(par_datum, par_start_day) - par_datum;
11 return rc;
12 end;
13 /
Function created.
测试:
SQL> select f_week('sun', date '2022-04-10') from dual;
F_WEEK('SUN',DATE'20
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
:B1+LEVEL-1
---------------
10.04.2022, sun
11.04.2022, mon
12.04.2022, tue
13.04.2022, wed
14.04.2022, thu
15.04.2022, fri
16.04.2022, sat
7 rows selected.
更多测试:
SQL> select f_week('sun', date '2022-04-14') from dual;
F_WEEK('SUN',DATE'20
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
:B1+LEVEL-1
---------------
14.04.2022, thu
15.04.2022, fri
16.04.2022, sat
SQL>