SQL语句帮助 - 选择今天订购的客户

时间:2009-07-30 00:33:15

标签: sql datetime select

假设我有一个存储客户订单ID的表。如

|客户ID |订单ID |订单日期

如何获得今天订购的所有客户?

OrderDate也是DateTime。

这样的东西
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today

但最后一部分是我无法弄清楚的。

3 个答案:

答案 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