2016-08-24 7 views
-1

月曜日のスクリプトの下に3日戻って、他の日は1日後に戻ります。 正しく動作しないと思います。 修正できますか?金曜のデータを取得する月曜日

MyDate>=dateadd(dd,case substring(datename(dw,getdate()),1,3) 
when 'MON' then -3 else -1 end,getdate()) 
+2

「正しく動作しないと思う」とはどういう意味ですか?どのような結果やエラーが表示されますか? – Egl

+0

金曜日に発生したすべてのデータをキャプチャしません。一部のデータがありません! – user6751695

答えて

-1

私はあなたにも、時間の部分を持っているDATEADDに3番目のパラメータとしてGETDATE()を使用しているので、それはかもしれないと思います。

3日後(実際には3 * 24時間遅れ)になりますが、3 * 24時間前に金曜日や何か起きたことはありません。

月曜日の午前11時45分にクエリを実行しているとすると、金曜日の午前11時45分からのすべてのデータが取得されますが、その前のデータはありません。データ。

以下は、金曜日(一日中)に発生したすべてのデータ/行を取得するコードの修正版です。 、この問題を解決するだけで迅速なハックを行うと、これまでにgetdate()を変換し、一日の始まりを含む日付/時刻の組み合わせを生成するために、DATETIMEするために

MyDate>= dateadd(dd, case 
         substring(datename(dw,getdate()),1,3) 
          when 'MON' 
           then -3 
          else -1 end 
         ,cast(cast(getdate() as date) as datetime)) 

select 
    getdate() 
    , cast(getdate() as date) 
    , cast(cast(getdate() as date) as datetime) 

2016-08-24 13:05:11.603 | 2016-08-24 | 2016-08-24 00:00:00.000 
+0

なぜdownvote?私は私の答えが間違っているのが不思議です。 –

+0

申し訳ありませんが、私は間違ってそれをチェックしました。私はちょうどそれに正解をマークした。ご協力いただきありがとうございます。 – user6751695

+0

@ user6751695さて、もしあなたが意味していないのであれば、ダウンボトムを解除してください:) –

0
MyDate>=case 
when datename(dw,getdate())='Monday' 
then dateadd(day,-3,cast(getdate() as date)) 
else dateadd(day,-1,cast(getdate() as date)) end 
0

あなたは、クエリの下に使用することができます

は、ここでそれが何をするかの簡単な例です。

select case when datepart(weekday ,cast((floor(cast(getdate() as float))) as datetime)) = 2 
      then (select cast((floor(cast(getdate() as float))-3) as datetime)) 
      else (select cast((floor(cast(getdate() as float))-1) as datetime)) 
      end as Date 
関連する問題