0

如果我有当前日期(sysdate)和当前星期几,如何找到下一个星期一的日期?

ps请告诉我如何按星期而不是按日期获取日期。

4

3 回答 3

2

您可以使用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.
于 2013-09-26T12:36:52.367 回答
1

如果您想强制提供当前日期和当前日期,可以尝试此操作。否则,您可以仅使用日期或仅使用月份日期使其更简单。

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;
于 2013-09-26T12:35:42.807 回答
0

这取决于星期天是“你的”一周的第一天还是最后一天。

如果你的一周从星期一开始,那么使用

select trunc(sysdate, 'iw') + 7 from dual;

如果您的一周从星期日开始,则使用

select trunc(sysdate, 'w') + 8 from dual;
于 2013-09-26T12:27:52.050 回答