powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как определить дату - sysdate+30 рабочих дней
8 сообщений из 8, страница 1 из 1
Как определить дату - sysdate+30 рабочих дней
    #32081591
James
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Срочно!!! Как определить дату - sysdate+30 рабочих дней, т.е. не считая субботы и воскресенья?????
Заранее спасибо!!!
...
Рейтинг: 0 / 0
Как определить дату - sysdate+30 рабочих дней
    #32081880
Rescator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще-то это ровно 6 недель(5рабочих+2нерабочих).
...
Рейтинг: 0 / 0
Как определить дату - sysdate+30 рабочих дней
    #32081916
RifNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select trunc(sysdate) +
<кол-во_дней> + round( <кол-во_дней>/5, 0) * 2 +
decode( to_char(sysdate,'D'), 7, 2,
1, 1,
0
)
from dual


P.S. для правильной работы to_char(...), можно явно указать nls_lang 3-м параметром...
...
Рейтинг: 0 / 0
Как определить дату - sysdate+30 рабочих дней
    #32082113
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Rescator
pri uslovii chto segodnya ne subbota. naprimer.
...
Рейтинг: 0 / 0
Как определить дату - sysdate+30 рабочих дней
    #32082116
Alex_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-- Функция добавления к указаной дате N рабочих дней
-- Параметры:
-- n - количество рабочих дней которое необходимо добавить
-- p_date - дата к которой осуществляется добавление
-- Возврат:
-- - получаемую дату
FUNCTION GetDateAddNWorkDay( n in integer default 10,
p_date in date default sysdate)RETURN date is
v_n Integer;
v_date Date;
v_razn Integer;
begin
v_n := n;
v_date := p_date;
while v_n > 0 loop
v_date := v_date + 1;
select to_number(decode(to_char(v_date,'DAY'),to_char(to_date('13.07.2002','dd.mm.yyyy'),'DAY'),0, -- 13.07.2002 - 100% суббота
to_char(to_date('14.07.2002','dd.mm.yyyy'),'DAY'),0, -- 14.07.2002 - 100% воскресенье
1)) into v_razn from dual;
v_n := v_n - v_razn;
end loop;
return v_date;
end;
...
Рейтинг: 0 / 0
Как определить дату - sysdate+30 рабочих дней
    #32082146
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vtoroy variant function:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create or replace
function get_shift_date (p_date date, p_shift number) return date is
  cnt number :=  0 ;
begin
  for r in ( select p_date + rownum d_date,
             decode(to_char(sysdate + rownum,'d'), 6 , 0 , 7 , 0 , 1 ) sm
             from all_objects where rownum < p_shift *  7 / 5  +  2 )
  loop
     cnt := cnt + r.sm;
     if cnt = p_shift then return r.d_date; end if;
  end loop;
  return null;
end;
/

SQL> select get_shift_date(sysdate, 30 ) from dual;

GET_SHIFT
 ---------
 
 30 -JAN- 03 


...
Рейтинг: 0 / 0
Как определить дату - sysdate+30 рабочих дней
    #32082387
Фотография Vadim_Maximov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, не забывайте, что нерабочими днями могут также являться и будни.
Равно, как и выходные могут быть рабочими днями.
...
Рейтинг: 0 / 0
Как определить дату - sysdate+30 рабочих дней
    #32082397
Alex_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадиму Максимову
>> тогда надо делать табл. с праздниками и бежать по ней отсчитывая 30 дней ...
Текст функции не привожу так как он будет простейшим ...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как определить дату - sysdate+30 рабочих дней
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]