розетки в сервлетах

Один из подходов состоит в том, чтобы «ходить по датам» от начала до конца в сочетании с выражением case, которое проверяет, не день ли это суббота или воскресенье и помечено (1 для буднего дня, 0 для выходных). И в итоге просто флага суммы (он будет равен счету 1-флагов, так как другой флаг равен 0), чтобы дать вам количество будних дней.

Вы можете использовать GetNums (startNumber, endNumber ) тип функции полезности, которая генерирует ряд чисел для «цикла» от даты начала до конца. Для реализации см. http://tsql.solidq.com/SourceCodes/GetNums.txt . Логика также может быть расширена для обслуживания праздников (скажем, если у вас есть таблица праздников)

declare @date1 as datetime = '19900101'
declare @date2 as datetime = '19900120'

select  sum(case when DATENAME(DW,currentDate) not in ('Saturday', 'Sunday') then 1 else 0 end) as noOfWorkDays
from dbo.GetNums(0,DATEDIFF(day,@date1, @date2)-1) as Num
cross apply (select DATEADD(day,n,@date1)) as Dates(currentDate)

0
задан Rakesh 23 January 2012 в 05:37
поделиться