powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Исключение выходные
7 сообщений из 32, страница 2 из 2
Исключение выходные
    #39899649
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через ф-цию:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
create or replace
  function next_workday(
                        p_offset number,
                        p_date   date := trunc(sysdate)
                       )                      
    return date
    is
        v_res_date date;
    begin
        with not_a_holiday as (
                                select  p_date + level - 1 dt
                                  from  dual
                                  connect by p_date + level - 1 <= add_months(p_date,12) -- измени если нужно больше чем на год вперед.
                               minus
                                select  *
                                  from  holiday
                              ),
                  workdays as (
                               select  row_number() over(order by dt) rn,
                                       dt workday
                                 from  not_a_holiday
                                 where dt - trunc(dt,'iw') <= 4
                              )
        select  workday
          into  v_res_date
          from  workdays
          where connect_by_isleaf = 1
          start with workday = p_date - least(0,p_date - trunc(p_date + 2,'iw'))
          connect by rn = prior rn + 1
                 and level <= p_offset + 1;
        return v_res_date;
end;
/
with test_dates as (
                    select  date '2019-11-30' + level curr_date
                      from  dual
                      connect by level <= 13
                   )
select  to_char(curr_date,'mm/dd/yyyy, fmDay') current_date,
        to_char(next_workday(10,curr_date),'mm/dd/yyyy, fmDay') current_date_plus_10_workdays
  from  test_dates
  order by curr_date
/

CURRENT_DATE          CURRENT_DATE_PLUS_10_WORKDAYS
--------------------- ------------------------------
12/01/2019, Sunday    12/16/2019, Monday
12/02/2019, Monday    12/16/2019, Monday
12/03/2019, Tuesday   12/17/2019, Tuesday
12/04/2019, Wednesday 12/18/2019, Wednesday
12/05/2019, Thursday  12/19/2019, Thursday
12/06/2019, Friday    12/20/2019, Friday
12/07/2019, Saturday  12/23/2019, Monday
12/08/2019, Sunday    12/23/2019, Monday
12/09/2019, Monday    12/23/2019, Monday
12/10/2019, Tuesday   12/24/2019, Tuesday
12/11/2019, Wednesday 12/27/2019, Friday
12/12/2019, Thursday  12/30/2019, Monday
12/13/2019, Friday    12/31/2019, Tuesday

13 rows selected.

SQL> 



SY.
...
Рейтинг: 0 / 0
Исключение выходные
    #39899753
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karbka
Компактно, спасибо!
karbka
но вдруг кто элегантнее решение знает.
PL/SQL. SQL притянут за гланды.

P.S. Ты слишком узко смотришь на проблему праздников. Возможно в сильно пьющих странах выход на работу между выходными и праздником, скажем, в среду - это норма. Но некоторые страны оптимизируют "дыры", перенося их на субботы. И тогда только в том году понедельник (пятница) выходной, а какая-то суббота в этом же месяце рабочая.
...
Рейтинг: 0 / 0
Исключение выходные
    #39899889
karbka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic

P.S. Ты слишком узко смотришь на проблему праздников. Возможно в сильно пьющих странах выход на работу между выходными и праздником, скажем, в среду - это норма. Но некоторые страны оптимизируют "дыры", перенося их на субботы. И тогда только в том году понедельник (пятница) выходной, а какая-то суббота в этом же месяце рабочая.


Может, и не сильно, но часто точно :)

Насколько понимаю в ЮК немного другой подход:
https://www.gov.uk/bank-holidays
Есть список (даже не календарь) праздников на официальном сайте правительства. Часть из этих праздников не зависит от конкретной даты, как например, "Early May bank holiday" или "Summer bank holiday", аля такой-то понедельник месяца, чтобы у народа было несколько дней подряд на отдых. Соответственно сб, вс всегда выходные плюс опционально праздники. Видимо, поэтому такая реализация...
...
Рейтинг: 0 / 0
Исключение выходные
    #39900006
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри за оффтоп, но
Elic
Возможно в сильно пьющих странах выход на работу между выходными и праздником, скажем, в среду - это норма.

как-то жаль прибалтов... Данные точные?
...
Рейтинг: 0 / 0
Исключение выходные
    #39900570
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Сорри за оффтоп, но
, тем не менее, ты меня прекрасно понял.
...
Рейтинг: 0 / 0
Исключение выходные
    #39900829
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
andrey_anonymous
Сорри за оффтоп, но
, тем не менее, ты меня прекрасно понял.

То есть ты действительно уверен, что в Молдавии, Германии или Литве не переносят праздники?
Удивительно.
Пруф, быть может, представишь?
...
Рейтинг: 0 / 0
Исключение выходные
    #39900835
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
не переносят праздники
Праздники нигде не переносят... но ты меня прекрасно понял!(?)
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Исключение выходные
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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