SQLステートメントヘルプ—今日注文した顧客を選択してください
質問
顧客の注文IDを保存するテーブルがあるとします。など
|お客様ID |注文ID |注文日
今日注文したすべての顧客を獲得するにはどうすればよいですか
OrderDateもDateTimeになります。
次のようなもの
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today
しかし、最後の部分は私が理解できないものです。
解決
日時以外の日付のみが必要になるのはかなり一般的です-RDBMSの詳細をGoogleで確認できるはずです(言及しないので)。重要なことは、今日の日付を変換して、クエリを SARGable にすることです。 1 -注文日ではありません。
MSSQLの場合、
SELECT DISTINCT CustomerID
FROM TableName
--I assume you want midnight orders as well - so use >=
Where OrderDate >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
今日は日0からの日数( DATEDIFF(dd、0、GETDATE())
)を取得し、それらを日付0( DATEADD(dd、0 、x)
)。ただし、これはT-SQL固有です。
1 任意の日付を検索している場合でも、両方の引数を変換できます:
SELECT DISTINCT CustomerID
FROM TableName
Where
OrderDate >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
--You *do not* want midnight of the next day, as it would duplicate orders
AND OrderDate < DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()) + 1)
他のヒント
Oracleでは、ステートメントは次のようになります。
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate >= trunc(sysdate)
SQL-Serverは同様でなければなりません
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate = CAST(GetDate() AS NUMERIC)
または
SELECT DISTINCT CustomerID
FROM TableName
Where CAST(OrderDate AS NUMERIC) = CAST(GetDate() AS NUMERIC)
指定された日付と同じ時刻に異なる時刻を返すことを確認しようとしました。したがって、日付が数値に変換されるときに機能するはずです。
SELECT CAST(0 AS DATETIME)
は1/1/1900 12:00:00 AMを返します
所属していません StackOverflow