假設我有一個存儲客戶訂單ID的表。如SQL語句幫助 - 選擇今日訂購的客戶
|客戶ID |訂單ID |訂單日期
我如何獲得今天訂購的所有客戶?
也OrderDate將是DateTime。
喜歡的東西
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today
但最後一部分是我想不通。
假設我有一個存儲客戶訂單ID的表。如SQL語句幫助 - 選擇今日訂購的客戶
|客戶ID |訂單ID |訂單日期
我如何獲得今天訂購的所有客戶?
也OrderDate將是DateTime。
喜歡的東西
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today
但最後一部分是我想不通。
是很常見的,只希望有一個日期了日期時間的 - 你應該能夠谷歌的你的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)
在Oracle的聲明看起來是這樣的:
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate >= trunc(sysdate)
SQL-Server應是類似
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
SQL Server沒有`trunc`語句。 – Eric 2009-07-30 00:47:52