2016-04-14 8 views
1

日付が< = 1のすべての注文を数える必要があります。私はCOALESCE関数を使用します。これはDate1がnullになることがあるためです。SQL Date Diff Business Days

SELECT COUNT(*) 
FROM Orders 
WHERE DATEDIFF(dd,COALESCE(Date1, Date2),Date0) <= 1 

営業日(月〜金)のみカウントできる方法はありますか?

ありがとうございました。

+0

営業日を定義します。月〜金を意味しますか、クリスマスなどの祝日を除外する必要がありますか?クリスマスなどを除外する必要がある場合は、カレンダーテーブルでこれを定義する必要があります。 –

+0

申し訳ありませんが、月曜日から金曜日が必要です – user3175024

+0

あなたはSQL Serverを使用していると思います(それに合わせてタグ付けしてください)。そうであれば、 'DATENAME'関数を使って日付が週末にあるかどうかを調べることができます。 –

答えて

0
あなたはそれぞれ7 & 1のDWを持つべき土日を(無視するDATEPARTを使用して、条件付き合計にあなたの数を変更することができます

)。

SELECT SUM(CASE WHEN DATEPART(dw, COALESCE(Date1, Date2)) BETWEEN 2 AND 6 
      THEN 1 ELSE 0 END) 
FROM Orders 
WHERE DATEDIFF(dd,COALESCE(Date1, Date2),Date0) <= 1 
1

Calendarテーブルを使用して、すべての営業日を保存することができます。

または、次の簡単な数式を使用して、2つの日付間の営業日数を計算することができます。この式では、土曜日と日曜日は営業日ではないと仮定しています。 2つの与えられた日付が営業日であると仮定します。

これはすべて、通常の日数の差を計算してから、週の始まりごとにこの結果から2営業日を減算します。


例1

DECLARE @Date0 date = '2016-04-07'; -- Thursday 
DECLARE @Date1 date = '2016-04-08'; -- Friday 

SELECT 
    DATEDIFF(day, @Date0, @Date1) - 
    DATEDIFF(week, @Date0, @Date1) * 2 AS BusinessDays; 

結果

BusinessDays 
1 

例2

DECLARE @Date0 date = '2016-04-08'; -- Friday 
DECLARE @Date1 date = '2016-04-11'; -- Monday 

SELECT 
    DATEDIFF(day, @Date0, @Date1) - 
    DATEDIFF(week, @Date0, @Date1) * 2 AS BusinessDays; 

結果

BusinessDays 
1 

例3

DECLARE @Date0 date = '2016-04-08'; -- Friday 
DECLARE @Date1 date = '2016-04-18'; -- Monday 

SELECT 
    DATEDIFF(day, @Date0, @Date1) - 
    DATEDIFF(week, @Date0, @Date1) * 2 AS BusinessDays; 

結果

BusinessDays 
6 

あなたのクエリは次のようになります。

SELECT COUNT(*) 
FROM Orders 
WHERE 
    DATEDIFF(day, COALESCE(Date1, Date2), Date0) - 
    DATEDIFF(week, COALESCE(Date1, Date2), Date0) * 2 <= 1 
;