1

以下は、当月の総稼働日数を計算するための私のコードです。

DECLARE @my int
DECLARE @myDeduct int
DECLARE @day INT
DECLARE @mydate DATETIME

SET @mydate = getDate()

SET @myDeduct = 0
SET DateFirst 1 -- Set it monday=1 (value)

--Saturday and Sunday on the first and last day of a month will Deduct 1
IF (DATEPART(weekday,(DATEADD(dd,-(DAY(@mydate)-1),@mydate))) > 5)
SET @myDeduct = @myDeduct + 1

IF (DATEPART(weekday,(DATEADD(dd,-(DAY(DATEADD(mm,1,@mydate))),
                                                 DATEADD(mm,1,@mydate)))) > 5)
SET @myDeduct = @myDeduct + 1

SET @my = day(DATEADD(dd,-(DAY(DATEADD(mm,1,@mydate))),DATEADD(mm,1,@mydate)))

select (((@my/7) * 5 + (@my%7)) - @myDeduct) as Working_Day_per_month

今月の残りの営業日数を計算するにはどうすればよいですか?祝日は気になりません。

4

2 に答える 2

1

これを試して:

このクエリは、当月の稼働日を示します。非稼働日が土曜日と日曜日であると想定します。営業日/休日のリストを含むテーブルがある場合は、そのテーブルをクエリと結合して、正しい結果を得ることができます。

SELECT number+1 as 'day'
FROM   master..spt_values
WHERE  type='p'
AND    number <datepart(dd, DateAdd(day,-1,DateAdd(Month,1,DateAdd(Month,
                                          DateDiff(Month, 0, GETDATE()),0))))
AND    datename(WEEKDAY,DateAdd(Month, DateDiff(Month, 0, GetDate()),
                                         number) ) not in ('Saturday','Sunday')
于 2012-09-18T10:20:04.707 に答える
1

私はジョーGジョセフの答えを使用して、このように変更しました!

Declare @DaysLeft as INT

;With MyCTE AS
(
    SELECT number + 1 as 'CurrentDay'
    FROM   master..spt_values
    WHERE  type='p'
    AND    number < datepart(dd, DateAdd(day,-1,DateAdd(Month,1,DateAdd(Month,
                                          DateDiff(Month, 0, GETDATE()),0))))
    AND    datename(WEEKDAY,DateAdd(Month, DateDiff(Month, 0, GETDATE()),
                                         number) ) not in ('Saturday','Sunday')
)

Select @DaysLeft = (Select COUNT(*) As MyTotal from MyCTE
WHERE CurrentDay >= DATEPART(DD, GETDATE()))

Select @DaysLeft
于 2012-09-18T12:14:35.390 に答える