2011-09-27 14 views

答えて

1

は、この質問をチェックアウト:Count work days between two dates

は、あなたにもあなたのためにその質問への答えを活用することができ、いくつかの方法があります。

+1

その答えはこの質問に変換するのが本当に難しいでしょう。また、彼らは本当に受け取ったすべてのポイントに値するものではありません。その質問の回答はこちらhttp://stackoverflow.com/questions/6704905/numbers-of-weekdays-in-a-date-range-in-tsql –

5
declare @from datetime= '9/20/2011' 
declare @to datetime = '9/28/2011' 

select datediff(day, -6, @to)/7-datediff(day, -5, @from)/7 
  1. @fromで火曜日の前に最初の月曜日の週を見つけます。
  2. は週
+0

+1素晴らしい作品です。しかし、これまでの数式を解くことはできません。 「-6」と「-5」は、それぞれ「1」とか「2」、あるいは他の火曜日と対応する(後の)水曜日になることは明らかです。私が疑問に思っているのは、あなたが経験的にしか正しい人物になったのか、それとも何とか彼らを計算したのかどうかということです。 –

+0

@AndriyMはい、-6と-5は1と同じ結果をもたらし、2はそうするでしょうが、説明するのが難しくなります。私は計算とテストによって結果に達し、最初の数回は正しい結果を得ていませんでした。 –

+0

@arjmandこれがあなたの問題を解決した場合、答えを受け入れてください –

2

t-clausen.dk &アンドリー・M @t-clausen.dks response and comments

クエリに対する応答として@to

  • 減算後の最初の月曜日の週を見つける1900-をするという事実を使用しています01-01は月曜日でした。そして、1900年1月1日は、日付0

    select dateadd(day,0,0)

    あるdatediff -functionへの2番目のパラメータはSTARTDATEです。

    ですから、今日までに、あなたの@で「1899年12月26日」を比較すると、「1899年12月26日には」使用する第2日程度火曜日

    select datename(dw,dateadd(day, 0, -6)), datename(dw, '1899-12-26')

    同じことです同じ事実。

    実際には、既知の火曜日とそれに対応する水曜と比較することができます(調べている日付間隔ではありません)。

    declare @from datetime= '2011-09-19' 
    declare @to datetime = '2011-10-15' 
    
    select datediff(day, '2011-09-13', @to)/7-datediff(day, '2011-09-14', @from)/7 as [works] 
         ,datediff(day, '2011-10-18', @to)/7-datediff(day, '2011-10-19', @from)/7 as [works too] 
         ,datediff(day, '2011-09-27', @to)/7-datediff(day, '2011-09-28', @from)/7 as [dont work] 
    

    基本的にアルゴリズムは「すべての火曜日からすべての水曜日を引いたもの」です。

  • 8

    ありがとうございましたt-clausen.dk、数日を節約しました。 毎日のインスタンスを取得するには:

    declare @from datetime= '3/1/2013' 
    declare @to datetime = '3/31/2013' 
    
    
    select 
    datediff(day, -7, @to)/7-datediff(day, -6, @from)/7 AS MON, 
    datediff(day, -6, @to)/7-datediff(day, -5, @from)/7 AS TUE, 
    datediff(day, -5, @to)/7-datediff(day, -4, @from)/7 AS WED, 
    datediff(day, -4, @to)/7-datediff(day, -3, @from)/7 AS THU, 
    datediff(day, -3, @to)/7-datediff(day, -2, @from)/7 AS FRI, 
    datediff(day, -2, @to)/7-datediff(day, -1, @from)/7 AS SAT, 
    datediff(day, -1, @to)/7-datediff(day, 0, @from)/7 AS SUN