SQLステートメントヘルプ—今日注文した顧客を選択してください

StackOverflow https://stackoverflow.com/questions/1203826

  •  05-07-2019
  •  | 
  •  

質問

顧客の注文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を返します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top