web-dev-qa-db-ja.com

現在の日付から2日を引いたSQL選択レコード

注文ID、注文日、注文の説明を含む注文テーブルがあります。

過去2日間に作成されたすべての注文をキャプチャする選択クエリを実行したいと思います。現在の日付から2日を引いたものです。 12月14日から、注文日が12月13日を超えるすべての注文を選択します。これは、Get Date関数を使用して、現在の日付から日数を引いたものを取得する必要があります。

私が試してみました:

select * from orders where orderdate > getdate() - 2 

しかし、これは正しい結果を生み出していません。これを行う方法はありますか?

4
Emma

dateadd 関数を使用してみてください

select * from orders where orderdate > dateadd(dd,-1,cast(getdate() as date))

これはまさにあなたが必要とするものかもしれませんが、今日にキャストすることで時間の部分を削除し、事実上その日の始まりに戻り、その後ろの日(-1)が昨日の始まりを与えることを理解する必要があります。

10
DhruvJoshi

過去2日間の注文が必要な場合は、DATEADDを使用して今日の日付に日数を追加し(この場合は-2日)、DATEDIFFを使用して2つの日数を比較します。

SELECT * FROM orders
WHERE DATEDIFF(DAY, DATEADD(DAY, -2, GETDATE()), orderdate) > 0

ここで、すべての注文に過去の日付があり、将来の日付がないと仮定すると(これは本来あるべき状態です)、次のようにDATEDIFFを使用できます。

SELECT * FROM orders
WHERE DATEDIFF(DAY, orderdate, GETDATE()) <= 2

注:< 3の代わりに<= 2を使用できます。

2
Racil Hilan

これを試して:

select * from orders where orderdate > cast(getdate() - 1 as date)
1

Dateaddとconvertが問題を解決するようです。

select   o.*
from     orders o
where    o.orderdate >= dateadd(day, -2, convert(date, getdate()))
1
StelioK