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

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

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

OrderDate也是DateTime。

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

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

有帮助吗?

解决方案

通常只想要一个日期时间之外的日期 - 你应该能够使用谷歌来获取你的RDBMS的具体内容(因为你没有提到它)。重要的是通过转换今天的日期来查询 SARGable 1 - 不是订单日期。

对于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应该类似

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top