«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как рассчитать рабочие часы между двумя датами в Oracle SQL?

Как рассчитать рабочие часы между двумя датами в Oracle SQL?

Опубликовано в 2025-02-06
Просматривать:935

How to Calculate Business Hours Between Two Dates in Oracle SQL?

Рассчитайте часы на основе рабочих часов в Oracle SQL

в Oracle SQL, вычисление часов между двумя периодами времени может быть простым. Однако, если вам необходимо учитывать рабочие часы, расчет становится более сложным.

Спецификация рабочих часов

предоставленные рабочие часы с понедельника по субботу с 8:00 До 18:00. Чтобы включить эти часы в расчет, вы можете использовать комбинацию манипулирования датой и условной логикой.

]

SQL Query

] Следующий запрос SQL предоставляет решение для расчета часов На основании указанных рабочих часов:

]
SELECT task,
       start_time,
       end_time,
       ROUND(
         (
           -- Calculate the full weeks difference from the start of ISO weeks.
           ( TRUNC( end_time, 'IW' ) - TRUNC( start_time, 'IW' ) ) * (10/24) * (6/7)
           -- Add the full days for the final week.
             LEAST( TRUNC( end_time ) - TRUNC( end_time, 'IW' ), 6 ) * (10/24)
           -- Subtract the full days from the days of the week before the start date.
           - LEAST( TRUNC( start_time ) - TRUNC( start_time, 'IW' ), 6 ) * (10/24)
           -- Add the hours of the final day
             LEAST( GREATEST( end_time - TRUNC( end_time ) - 8/24, 0 ), 10/24 )
           -- Subtract the hours of the day before the range starts.
           - LEAST( GREATEST( start_time - TRUNC( start_time ) - 8/24, 0 ), 10/24 )
         )
         -- Multiply to give minutes rather than fractions of full days.
         * 24,
         15 -- Number of decimal places
       ) AS work_day_hours_diff
FROM   your_table;

объяснение

  • недели: Quer ') и trunc (start_time,' iw '). Эти расчеты дают даты начала и окончания недель ISO, содержащие начало и конец задачи. Дни в начале и конце диапазона, где рабочие часы не могут применяться.
  • умножение:
  • с предоставленными образцами данных:
  • task | Start_time | End_time А | 16 января 17 10:00 | 23 января 17 11:35 B | 18 января 17 17:53 | 19 января 17 08:00 C | 13 января 17 13:00 | 17 января 17 14:52 D | 21 января-17 10:00 | 30-я-17 08:52
  • ] запрос выводит следующие результаты:
task

start_time

work_day_hours_diff

TASK | START_TIME | END_TIME
A | 16-JAN-17 10:00 | 23-JAN-17 11:35
B | 18-JAN-17 17:53 | 19-JAN-17 08:00
C | 13-JAN-17 13:00 | 17-JAN-17 14:52
D | 21-JAN-17 10:00 | 30-JAN-17 08:52

a 2017-01-16 10:00:00 (mon) 2017-01-16 10:00:00 &&&] 2017-01-23 11:35:00 (mon) 61.58333333333333 b 2017-01-19 08:00:00 (thu) . 2017-01-13 13:00:00 (fri) 2017-01-17 14:52:00 (Tue) 31.8666666666667 D 2017-01-21 10:00:00 (sat) 2017-01-30 08:52:00 (mon) 68.8666666666667 эти результаты точно отражают количество рабочего времени на основе указанных рабочих часов. ]
]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3