powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Временной интервал
25 сообщений из 47, страница 1 из 2
Временной интервал
    #39566456
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток! Нужна помощь, как можно подсчитать временной интервал мужду двумя датами, расчет времени с 9 до 18-00 в минутах без учета выходных дней?
Есть две даты 02.03.2017 17:30:13 и 23.02.2017 23:04:51 результат расчета получается 206 , вот как можно получить такой результат пока не могу понять...
...
Рейтинг: 0 / 0
Временной интервал
    #39566458
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018,

шо, опять?
...
Рейтинг: 0 / 0
Временной интервал
    #39566459
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот запрос который я использую, но получаю результат 3750 вместо 206, вот и не знаю как вычесть выходные дни

with q as (
select
to_date('23.02.2017 23:04:51', 'DD.MM.YYYY HH24:MI:SS') d1,
to_date('02.03.2017 17:30:13', 'DD.MM.YYYY HH24:MI:SS') d2,
9 h1,
18 h2
from dual
)
select
round ((
case
when d1 <= trunc(d1) + h1 / 24 then (h2 - h1) / 24
when d1 >= trunc(d1) + h2 / 24 then 0

else (trunc(d1) + h2 / 24) - d1
end
+
case
when d2 <= trunc(d2) + h1 / 24 then 0
when d2 >= trunc(d2) + h2 / 24 then (h2 - h1) / 24
else d2 - (trunc(d2) + h1 / 24)
end
+
greatest(trunc(d2) - trunc(d1) - 1) * (h2 - h1) / 24
) * 24 *60) hh
from q;
...
Рейтинг: 0 / 0
Временной интервал
    #39566468
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018,
Студентам, желающим помощи

Большие гонки- Макс, прибор?
- 200
- Что 200?
- А что прибор?


подготовьте тестовые данные, напишите что хотите получить, и что Вы написали, правильно оформив исполльзуя ТЭГ SRC
Код: plsql
1.
2.
3.
4.
5.
6.
with t as (select
to_date('02.03.2017 17:30:13','DD.MM.YYYY HH24:MI:SS') D1
,to_date('23.02.2017 23:04:51','DD.MM.YYYY HH24:MI:SS') D2
from dual
)
select D1-D2 from t



P.S. Судя по цифре 206 что-то не так, 5 рабочих дней на 8 часов
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
                                2017

         Jan                    Feb                    Mar
 S  M Tu  W Th  F  S    S  M Tu  W Th  F  S    S  M Tu  W Th  F  S
 1  2  3  4  5  6  7             1  2  3  4             1  2  3  4
 8  9 10 11 12 13 14    5  6  7  8  9 10 11    5  6  7  8  9 10 11
15 16 17 18 19 20 21   12 13 14 15 16 17 18   12 13 14 15 16 17 18
22 23 24 25 26 27 28   19 20 21 22 23 24 25   19 20 21 22 23 24 25
29 30 31               26 27 28               26 27 28 29 30 31

host expr 8 \* 7 \* 60
3360
...
Рейтинг: 0 / 0
Временной интервал
    #39566486
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите что мне необходимо добавить в предоставленый моною скрипт для вычета выходны, чтоб не считалось время выходных дней?
...
Рейтинг: 0 / 0
Временной интервал
    #39566488
vlad2018Подскажите что мне необходимо добавить в предоставленый моною скрипт для вычета выходны, чтоб не считалось время выходных дней?производственный календарь со списком выходных и праздничных дней....
...
Рейтинг: 0 / 0
Временной интервал
    #39566489
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018,
всего лишь выполнить просьбу 20891548
...
Рейтинг: 0 / 0
Временной интервал
    #39566491
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018вот запрос который я использую, но получаю результат 3750 вместо 206, вот и не знаю как вычесть выходные дни

автор без учета выходных дней


???

.....
stax
...
Рейтинг: 0 / 0
Временной интервал
    #39566497
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чтоб между датами 02.03.2017 17:30:13 и 23.02.2017 23:04:51 мы не считали субботу и воскресенье
...
Рейтинг: 0 / 0
Временной интервал
    #39566520
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018чтоб между датами 02.03.2017 17:30:13 и 23.02.2017 23:04:51 мы не считали субботу и воскресенье
Поиск: Учет праздничных дней
Но даже учет времени без выходных, не поможет получить 206
206 мин / 60 мин - будет чуть больше 3-х часов
...
Рейтинг: 0 / 0
Временной интервал
    #39566536
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как вообще не учитывать выходные дни в расчете?
...
Рейтинг: 0 / 0
Временной интервал
    #39566537
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018а как вообще не учитывать выходные дни в расчете?
Ссылка в 21017772
...
Рейтинг: 0 / 0
Временной интервал
    #39566587
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018,

без учета выходных (схема, сильно не проверял)

Код: 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.
with t as (
select to_date('02.03.2017 17:30:13','dd.mm.yyyy hh24:mi:ss') d1,
       to_date('23.02.2017 23:04:51','dd.mm.yyyy hh24:mi:ss') d2 from dual
)
,tt as (
select  
 --первый день
 case --з
  when d2<trunc(d2)+09/24 then 9*60 
  when d2>trunc(d2)+18/24 then 0 
  else (d2-trunc(d2))*24*60-9*60
  end d2
,
 --последний день
 case --з
  when d1<trunc(d1)+09/24 then 0
  when d1>trunc(d1)+18/24 then 9*60 
  else (d1-trunc(d1))*24*60-9*60
  end  d1
, --полные дни
((trunc(d1)-trunc(d2))-1)*9*60 d
from t
)
select (d+d1+d2) mi_all from tt

SQL> /

    MI_ALL
----------
3750,21667



.....
stax
...
Рейтинг: 0 / 0
Временной интервал
    #39568497
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Staxvlad2018,

без учета выходных (схема, сильно не проверял)

Код: 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.
with t as (
select to_date('02.03.2017 17:30:13','dd.mm.yyyy hh24:mi:ss') d1,
       to_date('23.02.2017 23:04:51','dd.mm.yyyy hh24:mi:ss') d2 from dual
)
,tt as (
select  
 --первый день
 case --з
  when d2<trunc(d2)+09/24 then 9*60 
  when d2>trunc(d2)+18/24 then 0 
  else (d2-trunc(d2))*24*60-9*60
  end d2
,
 --последний день
 case --з
  when d1<trunc(d1)+09/24 then 0
  when d1>trunc(d1)+18/24 then 9*60 
  else (d1-trunc(d1))*24*60-9*60
  end  d1
, --полные дни
((trunc(d1)-trunc(d2))-1)*9*60 d
from t
)
select (d+d1+d2) mi_all from tt

SQL> /

    MI_ALL
----------
3750,21667



.....
stax

Тут получается расчет времени с учетом выходных дней
...
Рейтинг: 0 / 0
Временной интервал
    #39568684
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018Тут получается расчет времени с учетом выходных дней
без выходных

возьміте маленький диапазон за выходные

....
stax
...
Рейтинг: 0 / 0
Временной интервал
    #39569563
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Staxvlad2018Тут получается расчет времени с учетом выходных дней
без выходных

возьміте маленький диапазон за выходные

....
stax

Если мы берем с 15.02.2017 10:39:06 по 28.02.2017 12:41:31 то должно получится 4982, при выполнении вашего скрипта получается 7239 т.е. при подсчете учитываются выходные
...
Рейтинг: 0 / 0
Временной интервал
    #39569583
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018,

Похоже Вы на разных языках говорите =)

Stax: без учета выходных. Имеет ввиду что запросу не проверяет выходной день или нет.
vlad2018: без учета выходных. Имеете ввиду что запрос должен выбросить выходные дни из расчета.

Я бы Вам порекомендовал ставить задачу точнее, например: исключить из расчета выходные дни

И примеры давать не за пол месяца (никто с калькулятором пересчитывать не будет) ... а за 1-2 дня (включая выходной)
...
Рейтинг: 0 / 0
Временной интервал
    #39569585
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLvlad2018,

Похоже Вы на разных языках говорите =)

Stax: без учета выходных. Имеет ввиду что запросу не проверяет выходной день или нет.
vlad2018: без учета выходных. Имеете ввиду что запрос должен выбросить выходные дни из расчета.

Я бы Вам порекомендовал ставить задачу точнее, например: исключить из расчета выходные дни

И примеры давать не за пол месяца (никто с калькулятором пересчитывать не будет) ... а за 1-2 дня (включая выходной)

Да, возможно мы не поняли друг друга) Вы прави "запрос должен выбросить выходные дни из расчета." Вот и обратился за помощью потому как не знаю как это можно реализовать..((
...
Рейтинг: 0 / 0
Временной интервал
    #39569603
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018,

Тогда встречный вопрос, а какие дни у Вас выходные? что делать с праздниками (они тоже выходные), с переносами выходных дней с последующими отработками (например рабочими субботами)?
...
Рейтинг: 0 / 0
Временной интервал
    #39569606
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLvlad2018,

Тогда встречный вопрос, а какие дни у Вас выходные? что делать с праздниками (они тоже выходные), с переносами выходных дней с последующими отработками (например рабочими субботами)?

Выходные дни только суббота и воскресенье
...
Рейтинг: 0 / 0
Временной интервал
    #39569613
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018MaximaXXLvlad2018,

Тогда встречный вопрос, а какие дни у Вас выходные? что делать с праздниками (они тоже выходные), с переносами выходных дней с последующими отработками (например рабочими субботами)?

Выходные дни только суббота и воскресенье

я спеціально составлял запрос з трех частей
1 первый день
2 последлний день
3 полные дни (без 1,2)


если выходные не могут быть в 1 и 2 то надо ухудчить (учесть субботы и недели)
Код: plsql
1.
2.
3.
4.
, --полные дни
((trunc(d1)-trunc(d2))-1)*9*60 d
from t
) 



.....
stax
...
Рейтинг: 0 / 0
Временной интервал
    #39569635
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Staxvlad2018пропущено...


Выходные дни только суббота и воскресенье

я спеціально составлял запрос з трех частей
1 первый день
2 последлний день
3 полные дни (без 1,2)


если выходные не могут быть в 1 и 2 то надо ухудчить (учесть субботы и недели)
Код: plsql
1.
2.
3.
4.
, --полные дни
((trunc(d1)-trunc(d2))-1)*9*60 d
from t
) 




.....
stax


Подскажите пожалуйста, как их учесть?
...
Рейтинг: 0 / 0
Временной интервал
    #39569648
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018

Подскажите пожалуйста, как их учесть?

Да Вам же ПОДСКАЗЫВАЮТ, разбивайте на интервалы, вычисляйте по частям, используйте trunc (почитайте что она может ....)

А у Вас получается подскажите читать как я 6 дней назад Вам задание поставил, а Вы еще ответ не написали.
...
Рейтинг: 0 / 0
Временной интервал
    #39569752
vlad2018
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLvlad2018
Подскажите пожалуйста, как их учесть?

Да Вам же ПОДСКАЗЫВАЮТ, разбивайте на интервалы, вычисляйте по частям, используйте trunc (почитайте что она может ....)

А у Вас получается подскажите читать как я 6 дней назад Вам задание поставил, а Вы еще ответ не написали.
В том то и дело, что не знаю как это сделать....
...
Рейтинг: 0 / 0
Временной интервал
    #39569770
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2018,

проверяйте (запутался я)

d_from d_to не выходные


Код: 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.
 with t as (
 select to_date('08.12.2017 17:00:00','dd.mm.yyyy hh24:mi:ss') d_from
       ,to_date('12.12.2017 09:20:00','dd.mm.yyyy hh24:mi:ss') d_to
 from dual
 )
 ,tt as (
 select
  --первый день
  case --з
   when d_from<trunc(d_from)+09/24 then 9*60
   when d_from>trunc(d_from)+18/24 then 0
   else ((trunc(d_from)+18/24) - d_from)*24*60
   end mi_from
 ,
 --последний день
  case --з
   when d_to<trunc(d_to)+09/24 then 0
   when d_to>trunc(d_to)+18/24 then 9*60 
   else (d_to-trunc(d_to))*24*60-9*60
   end  mi_to 
, 
--полные дни
 (select (sum(decode(mod(to_char(d_from+level,'j'),7),5,0,6,0,1))) *9*60 
 from t
 connect by d_from+level<d_to
 ) mi
 ,d_from
 ,d_to
 from t
 )
 select decode(trunc(d_from),trunc(d_to),(d_to-d_from)*24*60,mi+mi_from+mi_to) mi_all
--,mi_from,mi_to,mi  
from tt

SQL> /

    MI_ALL
----------
       620
...
Рейтинг: 0 / 0
25 сообщений из 47, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Временной интервал
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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