0

このタイプのコードでは、

AND Orders.ShipDate >= DATEADD(Day, Datediff(Day,0, GetDate() -6), 0)

6 日前から今日までの日付のレコードを取得することになっていました。7日前から昨日までのレコードを取得するにはどうすればよいですか?

-6に変更する-7と 7 日前のレコードが取得されることはわかっていますが、どの変数が日付範囲の最後なので、に変更でき-1ますか?

4

4 に答える 4

1

期間ではありません。

あなたが持っている条件は、実際にはただ1つの条件です:より大きい。より大きいの右側は6日前であるため、条件は6日前の日付より後の日付と一致します。言い換えれば、それは今日にとどまりません。明日、来週、来年も含まれます。

AND ( Orders.ShipDate >= DATEADD(Day, Datediff(Day,0, GetDate() -7), 0)
      AND Orders.ShipDate < DATEADD(Day, Datediff(Day,0, GetDate()), 0) )

それがあなたが本当に望んでいることです。これは、7日前の日の真夜中より後の日付と今日の真夜中より前の日付(昨日の任意の時刻)に一致します。

于 2012-02-06T23:31:05.780 に答える
0

「日付範囲の終わり」はクエリにありません。

コードを次のように変更します。

AND (Orders.ShipDate BETWEEN DATEADD(Day, -1, GetDate()) AND DATEADD(Day, -7, GetDate()))

于 2012-02-06T23:27:56.197 に答える
0

これも機能するはずであり、不要な 0 日を追加する必要がなくなります。

select *,DATEDIFF(Day, orders.ShipDate, GETDATE()) AS DAYS_SINCE_TODAY
from Orders 
where DATEDIFF(Day, orders.ShipDate, GETDATE()) >= 1 AND --This many days since today
      DATEDIFF(Day, orders.ShipDate, GETDATE()) <= 7     --Going back this many days
于 2012-02-07T00:16:45.247 に答える
0

私は BETWEEN 関数が好きです。これは、あなたが使用している SQL とは異なるフレーバーの SQL かもしれませんが、私はこれを使用しています。

BETWEEN dateadd(second, 0, dateadd(dd,datediff(dd,7,getdate()),0)) AND dateadd(second,-1, dateadd(dd,datediff(dd,0,getdate()),0))  
于 2016-04-26T19:36:08.573 に答える