Дата очередного дня недели

Функция

Вычисление даты очередного дня недели.

Спецификация
 
< синтаксис >::=
Синтаксические правила
  1. < Значимое выражение > должно иметь тип DATE или приводиться к нему.

  2. < День недели > – символьное выражение или приводимое к нему, которое должно иметь одно из следующих значений:

    Название дня недели
    ПолноеСокращенноеПолное
    MondayMonПонедельник
    TuesdayTueВторник
    WednesdayWedСреда
    ThursdayThuЧетверг
    FridayFriПятница
    SaturdaySatСуббота
    SundaySunВоскресенье
  3. Аргументы могут быть заданы < SQL-параметром >, который должен содержать спецификацию типа данных параметра.

    select next_day(? (date), ? (char(3)));
    01.01.2014
    sun
    |05.01.2014:00:00:00.00|

Возвращаемое значение
  1. Возвращается значение типа DATE, соответствующее указанному < дню недели > после заданной даты.

  2. Значение времени в возвращаемой дате совпадает со временем в исходной дате.

  3. Если запрашиваемый день недели совпадает с днем недели в исходной дате, возвращается дата следующего (т.е. через 7 дней) дня недели.

Примеры
  1.  

    select next_day(cast '04.08.2006' as date, 'fri');
    |11.08.2006:00:00:00|
  2. Определить дату первого понедельника следующего месяца:

    select next_day(last_day(cast '19-08-2006' as date),'monday');
    |04.09.2006:00:00:00|
  3. Определить дату дня недели после текущей даты (требуемый день недели берётся из таблицы):

    create or replace table tst(day_week char(3));
    insert into tst values('mon');
    insert into tst values('tue');
    
    select case dayname(next_day(sysdate, day_week))
             when 'mon' then 'понедельник'
             when 'tue' then 'вторник'
             when 'wed' then 'среда'
             when 'thu' then 'четверг'
             when 'fri' then 'пятница'
             when 'sat' then 'суббота'
             when 'sun' then 'воскресенье'
             else null end,
           next_day(sysdate, day_week)
      from tst where rowid=2;
    |вторник   |08.08.2006:10:23:12|