次のことを試していただけますか?を使用しDateDiff()
ます。
select datediff(day, startdate, enddate) as no_of_days,
month(fdate )as month
from leavedepot;
編集:SQLFIDDLEデモ
サンプルデータ:
ID STARTDATE ENDDATE
1 2012-01-28 2012-02-02
2 2012-02-03 2012-02-10
クエリ:
SELECT month(startdate) as Month_Number,
datename(month, startdate) as Month, -- month is a reserved word
case when month(startdate) <> month(enddate)
then datediff(day, startdate, DATEADD(month,
((YEAR(startdate) - 1900) * 12)
+ MONTH(startdate), -1))
else datediff(day, startdate, enddate)
end
as Leaves
from myleaves
;
結果:
MONTH_NUMBER MONTH LEAVES
1 January 3
2 February 7
万が一週末を除外したい場合は...:ここでは変数を使用して開始終了日を定義しますが、独自のテーブル列を使用することもできます。:)参照投稿:SQLServerを使用して週末を除くDATEDIFFを取得します。このクエリを上記に組み込む必要があります。
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;
2
開始日と終了日を除外するために、日を削除することもできます... datepartを使用する関数。