以下にクエリの例を示します。これは、私がどのように解決したかの詳細です。
DATEDIFF(WK, ...)
の使用 2 つの日付の間の週数が返されます。 SQL Server は、これを日数ではなく週数の差として評価します。これを使用して、日付間に渡された週末の数を判断できるため、これは完璧です。
したがって、その値を 2 倍して、発生した週末の日数を取得し、それを DATEDIFF(dd, ...)
から引くことができます。 平日の数を取得します。
ただし、開始日または終了日が日曜日の場合、これは 100% 正しく動作しません。そのため、これらのインスタンスを処理するために、場合によっては計算の最後にロジックを追加しました。
DATEDIFF
完全に包括的でなければなりません。例えば9/10 と 9/11 の違いは 1 日ですか、それとも 2 日ですか?後者の場合、最終製品に 1 を追加します。
declare @d1 datetime, @d2 datetime
select @d1 = '9/9/2011', @d2 = '9/18/2011'
select datediff(dd, @d1, @d2) - (datediff(wk, @d1, @d2) * 2) -
case when datepart(dw, @d1) = 1 then 1 else 0 end +
case when datepart(dw, @d2) = 1 then 1 else 0 end