我有一個要求,我必須根據傳遞給它的 start_date 和 end_date 從資料庫中選擇資料。
- 如果 sysdate 是 sunday,那么函式應該以 YYYYMMDD 格式回傳 start_date 作為星期六的日期,將 end_date 作為星期六的日期以 YYYYMMDD 格式回傳。
- 如果 sysdate 是 monday,則 start_date 應該是星期六的日期,end_date 應該是星期日。
- 如果 sysdate 是星期二,那么 start_date 應該是星期六的日期,end_date 應該是星期一……等等。
函式將如何基于 req.yyymmdd 格式回傳兩個日期。
uj5u.com熱心網友回復:
似乎開始日期總是星期六,而結束日期是sysdate 的前一天。
如果是這樣,方法如下:
我的資料庫說克羅地亞語,所以我要切換到英語(并設定默認日期格式,只是為了顯示sysdate是什么);你不必那樣做。
SQL> alter session set nls_date_language = 'english';
Session altered.
SQL> alter session set nls_date_format = 'dd.mm.yyyy';
Session altered.
該TEMPCTE模仿SYSDATE變化。next_day函式搜索 之前的星期六sysdate。
21.11.2021 是星期日,因此您希望將 20.11.2021 作為開始和結束日期:
SQL> with temp as (select date '2021-11-21' sys_date from dual)
2 select
3 sys_date,
4 to_char(next_day(sys_date, 'SATURDAY') - 7, 'yyyymmdd') as start_date,
5 to_char(sys_date - 1, 'yyyymmdd') as end_date
6 from temp;
SYS_DATE START_DA END_DATE
---------- -------- --------
21.11.2021 20211120 20211120
23.11.2021 是星期二,所以你想得到星期六作為開始日期和星期一作為結束日期:
SQL> with temp as (select date '2021-11-23' sys_date from dual)
2 select
3 sys_date,
4 to_char(next_day(sys_date, 'SATURDAY') - 7, 'yyyymmdd') as start_date,
5 to_char(sys_date - 1, 'yyyymmdd') as end_date
6 from temp;
SYS_DATE START_DA END_DATE
---------- -------- --------
23.11.2021 20211120 20211122
SQL>
實際上,你只要
SQL> select
2 sysdate,
3 to_char(next_day(sysdate, 'SATURDAY') - 7, 'yyyymmdd') as start_date,
4 to_char(sysdate - 1, 'yyyymmdd') as end_date
5 from dual;
SYSDATE START_DA END_DATE
---------- -------- --------
18.11.2021 20211113 20211117
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/361909.html
