【发布时间】:2009-07-30 00:33:15
【问题描述】:
假设我有一个存储客户订单 ID 的表。比如
|客户编号 |订单编号 |订购日期
如何获取今天下单的所有客户?
OrderDate 也是 DateTime。
类似
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today
但最后一部分是我想不通的。
【问题讨论】:
假设我有一个存储客户订单 ID 的表。比如
|客户编号 |订单编号 |订购日期
如何获取今天下单的所有客户?
OrderDate 也是 DateTime。
类似
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today
但最后一部分是我想不通的。
【问题讨论】:
只想要一个日期时间之外的日期是很常见的 - 您应该能够在 Google 上搜索您的 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)
【讨论】:
在 Oracle 中,该语句类似于:
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate >= trunc(sysdate)
SQL-Server 应该类似
【讨论】:
trunc 语句。
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
【讨论】: