COUNT WORKING DAYS IN MONTH (количество рабочих дней в месяце)


Данная функция возвращает количество рабочих дней в месяце, который берется из указанной даты.
Выходными днями функция считает СУББОТУ (7) и ВОСКРЕСЕНЬЕ (1).

Пример вызова функции:

select WORKDAYS ('2014-02-10');
--
20
CREATE FUNCTION WORKDAYS (@DAT DATETIME)
RETURNS INT
with schemabinding
AS
/* Возвращает количество рабочих дней в месяце по указанной дате */
BEGIN
DECLARE @RET INT;
set @RET = null;

select @RET = count(*) from (
select cast(convert(varchar(4),year(@DAT)) + '-' + convert(varchar(2),month(@DAT)) + '-' + convert(varchar(2),calendar.dd) as date) dt
from (
select 1 dd union
select 2 dd union
select 3 dd  union
select 4 dd  union
select 5 dd  union
select 6 dd  union
select 7 dd  union
select 8 dd  union
select 9 dd  union
select 10 dd  union
select 11 dd  union
select 12 dd  union
select 13 dd  union
select 14 dd  union
select 15 dd  union
select 16 dd  union
select 17 dd  union
select 18 dd  union
select 19 dd  union
select 20 dd  union
select 21 dd  union
select 22 dd  union
select 23 dd  union
select 24 dd  union
select 25 dd  union
select 26 dd  union
select 27 dd  union
select 28 dd  union
select 29 dd  union
select 30 dd  union
select 31 dd ) calendar
where calendar.dd <= DAY(convert(date, convert(varchar, dateadd(month,1,dateadd(day,1-day(@DAT),@DAT))-1)))
and datepart(w,cast(convert(varchar(4),year(@DAT)) + '-' + convert(varchar(2),month(@DAT)) + '-' + convert(varchar(2),calendar.dd) as date)) NOT IN (1,7)) ap;
RETURN @RET;
END
GO

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s