假设我有一个存储客户订单ID的表。如
|客户ID |订单ID |订单日期
如何获得今天订购的所有客户?
OrderDate也是DateTime。
像
这样的东西SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today
但最后一部分是我无法弄清楚的。
答案 0 :(得分:3)
通常只想要一个日期时间之外的日期 - 你应该能够使用谷歌来获取你的RDBMS的具体内容(因为你没有提到它)。重要的是通过转换今天的日期 1 来进行查询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的。
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)
答案 1 :(得分:0)
在Oracle中,语句看起来像:
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate >= trunc(sysdate)
SQL-Server应该类似
答案 2 :(得分: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