Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Расчет количества рабочих часов между 2 я датами  [new]
plosten
Member

Откуда:
Сообщений: 2
Всем привет. Есть функция которая рассчитывает рабочие часы между 2 я датами :
USE [ERPReports]
GO
/****** Object: UserDefinedFunction [dbo].[f_get_CountWorksHours] Script Date: 28.11.2018 15:30:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER FUNCTION [dbo].[f_get_CountWorksHours]
(
@startdate Datetime2,
@enddate Datetime2
)
RETURNS TABLE AS RETURN
(
SELECT
(DATEDIFF(mi, @startdate, @enddate))/1440 +1
-(DATEDIFF(wk, @startdate, @enddate) * 2)
-(CASE WHEN DATENAME(dw, @startdate) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, @enddate) = 'Saturday' THEN 1 ELSE 0 END)
As NoOfWeekDays

)

На вход подается интервал с датами и временем, в которые отсутствовал сотрудник. Не устраивает то, что она выдает целые дни.
Например сотрудник отсутствовал один день полдня , другой 2 часа а функция считает что он отсутствовал 2 дня. как можно ее переделать, чтобы в итоге из всего интервала dj первых учитывались только рабочие дни во вторых считалось именно время отсутствия по часам. Пример интервала
Отсутствующий DateTimeStart DateTimeFinish
Елена Тищенко 2018-11-19 08:00:00.000 2018-11-19 19:00:00.000
Елена Тищенко 2018-11-20 17:15:00.000 2018-11-20 18:15:00.000
Елена Тищенко 2018-11-21 17:45:00.000 2018-11-21 18:30:00.000
Елена Тищенко 2018-11-22 17:30:00.000 2018-11-22 18:30:00.000
то есть по идее функция должна вернуть в интервале с '2018-11-19 00:01:06.000' по '2018-11-24 00:01:06.000' что то около 1.3 дня
Рабочий день считать в интервале с 8 до 18.00. и праздники не учитывать

Модератор: Тема перенесена из форума "MySQL".


Сообщение было отредактировано: 29 ноя 18, 11:36
29 ноя 18, 08:46    [21748034]     Ответить | Цитировать Сообщить модератору
 Re: Расчет количества рабочих часов между 2 я датами  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
plosten,

например ... /CAST(1440 as money)
29 ноя 18, 11:39    [21748286]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить