如果我有当前日期(sysdate)和当前星期几,如何找到下一个星期一的日期?
ps请告诉我如何按星期而不是按日期获取日期。
您可以使用next_day功能:
select next_day(sysdate, 'MONDAY') from dual;
如果国家设置不是英语,我们可以让 Oracle 生成“星期一”的本地化翻译并像这样使用它:
SQL> set serveroutput on
SQL> alter session set nls_date_format="YYYY-MM-DD";
Session altered.
SQL> alter session set nls_date_language=italian;
Session altered.
SQL> declare
2 v_monday constant varchar2(100) := to_char(to_date('2013-09-30', 'yyyy-mm-dd'), 'day');
3 begin
4 dbms_output.put_line('v_monday = ' || v_monday);
5 dbms_output.put_line('next monday will be ' || next_day(sysdate, v_monday));
6 end;
7 /
v_monday = lunedi
next monday will be 2013-09-30
PL/SQL procedure successfully completed.
SQL> alter session set nls_date_language=spanish;
Session altered.
SQL> declare
2 v_monday constant varchar2(100) := to_char(to_date('2013-09-30', 'yyyy-mm-dd'), 'day');
3 begin
4 dbms_output.put_line('v_monday = ' || v_monday);
5 dbms_output.put_line('next monday will be ' || next_day(sysdate, v_monday));
6 end;
7 /
v_monday = lunes
next monday will be 2013-09-30
PL/SQL procedure successfully completed.
如果您想强制提供当前日期和当前日期,可以尝试此操作。否则,您可以仅使用日期或仅使用月份日期使其更简单。
WITH DATASET
AS (SELECT
'MON' AS CURRENT_DAY,
'2013-06-26' AS CURENT_DATE
FROM
DUAL)
SELECT
CASE
WHEN CURRENT_DAY = 'MON'
THEN
TO_DATE ( CURENT_DATE,
'yyyy-mm-dd' )
+ INTERVAL '7' DAY
WHEN CURRENT_DAY = 'TUE'
THEN
TO_DATE ( CURENT_DATE,
'yyyy-mm-dd' )
+ INTERVAL '6' DAY
WHEN CURRENT_DAY = 'WED'
THEN
TO_DATE ( CURENT_DATE,
'yyyy-mm-dd' )
+ INTERVAL '5' DAY
WHEN CURRENT_DAY = 'THU'
THEN
TO_DATE ( CURENT_DATE,
'yyyy-mm-dd' )
+ INTERVAL '4' DAY
WHEN CURRENT_DAY = 'FRI'
THEN
TO_DATE ( CURENT_DATE,
'yyyy-mm-dd' )
+ INTERVAL '3' DAY
WHEN CURRENT_DAY = 'SAT'
THEN
TO_DATE ( CURENT_DATE,
'yyyy-mm-dd' )
+ INTERVAL '2' DAY
WHEN CURRENT_DAY = 'SUN'
THEN
TO_DATE ( CURENT_DATE,
'yyyy-mm-dd' )
+ INTERVAL '1' DAY
END
AS DATE_OF_NEXT_MON
FROM
DATASET;
这取决于星期天是“你的”一周的第一天还是最后一天。
如果你的一周从星期一开始,那么使用
select trunc(sysdate, 'iw') + 7 from dual;
如果您的一周从星期日开始,则使用
select trunc(sysdate, 'w') + 8 from dual;