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

шо, опять?
...
Рейтинг: 0 / 0
08.12.2017, 11:14
    #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
08.12.2017, 11:22
    #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
08.12.2017, 11:47
    #39566486
vlad2018
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временной интервал
Подскажите что мне необходимо добавить в предоставленый моною скрипт для вычета выходны, чтоб не считалось время выходных дней?
...
Рейтинг: 0 / 0
08.12.2017, 11:49
    #39566488
Временной интервал
vlad2018Подскажите что мне необходимо добавить в предоставленый моною скрипт для вычета выходны, чтоб не считалось время выходных дней?производственный календарь со списком выходных и праздничных дней....
...
Рейтинг: 0 / 0
08.12.2017, 11:49
    #39566489
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временной интервал
vlad2018,
всего лишь выполнить просьбу 20891548
...
Рейтинг: 0 / 0
08.12.2017, 11:52
    #39566491
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временной интервал
vlad2018вот запрос который я использую, но получаю результат 3750 вместо 206, вот и не знаю как вычесть выходные дни

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


???

.....
stax
...
Рейтинг: 0 / 0
08.12.2017, 11:58
    #39566497
vlad2018
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временной интервал
чтоб между датами 02.03.2017 17:30:13 и 23.02.2017 23:04:51 мы не считали субботу и воскресенье
...
Рейтинг: 0 / 0
08.12.2017, 12:32
    #39566520
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временной интервал
vlad2018чтоб между датами 02.03.2017 17:30:13 и 23.02.2017 23:04:51 мы не считали субботу и воскресенье
Поиск: Учет праздничных дней
Но даже учет времени без выходных, не поможет получить 206
206 мин / 60 мин - будет чуть больше 3-х часов
...
Рейтинг: 0 / 0
08.12.2017, 12:55
    #39566536
vlad2018
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временной интервал
а как вообще не учитывать выходные дни в расчете?
...
Рейтинг: 0 / 0
08.12.2017, 12:56
    #39566537
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временной интервал
vlad2018а как вообще не учитывать выходные дни в расчете?
Ссылка в 21017772
...
Рейтинг: 0 / 0
08.12.2017, 13:49
    #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
12.12.2017, 17:12
    #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
12.12.2017, 21:26
    #39568684
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временной интервал
vlad2018Тут получается расчет времени с учетом выходных дней
без выходных

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

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

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

....
stax

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

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

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

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

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

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

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

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

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

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

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

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

Выходные дни только суббота и воскресенье
...
Рейтинг: 0 / 0
14.12.2017, 13:54
    #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
14.12.2017, 14:25
    #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
14.12.2017, 14:45
    #39569648
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временной интервал
vlad2018

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

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

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

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

А у Вас получается подскажите читать как я 6 дней назад Вам задание поставил, а Вы еще ответ не написали.
В том то и дело, что не знаю как это сделать....
...
Рейтинг: 0 / 0
14.12.2017, 16:49
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Временной интервал / 25 сообщений из 47, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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