0

こんにちは、2 つの日付から週末と英国の祝日との間の営業日数を返す TSQL 関数のスクリプトを作成しようとしています。修正):

CREATE FUNCTION dbo.fn_WorkDays (@StartDate AS DATETIME, @EndDate AS DATETIME)

--Define the output data type.
RETURNS INT
AS
--Calculate the RETURN of the function.
BEGIN
     RETURN (SELECT
        (DATEDIFF(dd,@StartDate, @EndDate)+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)
        )END
GO

これで、英国の銀行休業日を保存したテーブルにアクセスできるようになりました (または、必要に応じてコピーできます)。セットアップの画面は次のとおりです。

テーブルセッティングの様子

私はTSQLにかなり慣れていないので、バンクホールのリストを調べて関数の返されるINTからそれらを削除し、関数に渡された2つの日付の間の正しい営業日数を返す方法に苦労しています。

ヘルプとアドバイスをいただければ幸いです (特に、わかりやすい形式で書かれている場合は特に ;))

4

1 に答える 1

2

私はこのようなもののために Calendar テーブルを使用してきました - すべての日付に 1 つのエントリ、およびさまざまなコンテキストの平日、週末、休日などのメタデータ。多くのタスクに非常に便利です。WHILE(簡単なループで設定できます。)

カウントは次のようになります:
(calendarWeekdayは生成時に で埋められDATEPART(Weekday...ます。結果は地域によって異なります)。

SELECT COUNT(calendarDate)
FROM tblCalendar
WHERE 
    calendarDate BETWEEN @StartDate AND @Enddate
    AND calendarWeekday NOT IN (1, 7) AND calendarIsBankHoliday = 0
于 2013-07-31T13:42:56.607 に答える