2009-07-30 58 views
4

假設我有一個存儲客戶訂單ID的表。如SQL語句幫助 - 選擇今日訂購的客戶

|客戶ID |訂單ID |訂單日期

我如何獲得今天訂購的所有客戶?

也OrderDate將是DateTime。

喜歡的東西

SELECT DISTINCT CustomerID 
FROM TableName 
Where OrderDate > Today 

但最後一部分是我想不通。

回答

3

是很常見的,只希望有一個日期了日期時間的 - 你應該能夠谷歌的你的RDBMS的細節(因爲你沒有提到它)。重要的是通過變換今天的日期 - 而不是訂單日期來使您的查詢SARGable

對於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特有的。

如果你正在尋找一個任意日期,你還是會變換兩個參數:

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) 
0

在Oracle的聲明看起來是這樣的:

SELECT DISTINCT CustomerID 
FROM TableName 
Where OrderDate >= trunc(sysdate) 

SQL-Server應是類似

+0

SQL Server沒有`trunc`語句。 – Eric 2009-07-30 00:47:52

0
SELECT DISTINCT CustomerID 
FROM TableName 
Where OrderDate = CAST(GetDate() AS NUMERIC) 

OR

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