Расчет рабочих дней - PullRequest
       1

Расчет рабочих дней

1 голос
/ 16 сентября 2011

У меня есть запрос, в котором я вычисляю общее количество дней между двумя днями, включая дату начала и окончания, по следующему запросу SQL. Если дата окончания не равна нулю, то дата окончания считается текущей датой.

Этот запрос выполняет свою работу. Но я не хочу считать субботу и воскресенье. Возможны государственные праздники в Великобритании. (Я могу сделать это, если смогу понять логику для суббот и воскресений)

SELECT  DateDiff(day,DateADD(day,-1,StartDate),ISNULL(EndDate,getDate()))numberOfDays
        FROM <mytable>

Как мне считать только дни недели между двумя датами?

Спасибо

Ответы [ 3 ]

4 голосов
/ 16 сентября 2011

Я настоятельно рекомендую для этого таблицу календаря, особенно если вам необходимо учитывать определенные праздники.Например, динамическое вычисление Пасхи будет непростой задачейрегиональные / языковые настройки для вывода таких вещей, как DATENAME ...

2 голосов
/ 16 сентября 2011

Взгляните на страницу DATEDIFF MSDN . Внизу страницы находится пользовательский контент.
Один пользователь разместил там функцию, которая делает именно то, что вы хотите, включая выходные (заголовок: «UDF возвращает количество рабочих дней, включая чек в таблицу банковских выходных»).

1 голос
/ 16 сентября 2011

попробуйте

SELECT  DateDiff(day,DateADD(day,-1,StartDate),ISNULL(EndDate,getDate())) - 
( CASE WHEN DATENAME(dw, StartDate) = 'Sunday' OR 
DATENAME(dw,ISNULL(EndDate,getDate())) = 'Sunday' THEN 1 ELSE 0 END)
- ( CASE WHEN DATENAME(dw, StartDate) = 'Saturday' OR 
     DATENAME(dw,ISNULL(EndDate,getDate())) = 'Saturday' THEN 1 ELSE 0 END)
numberOfDays         
FROM <mytable> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...