【问题标题】:SQL statement help -- Select customers who ordered todaySQL语句帮助——选择今天订购的客户
【发布时间】:2009-07-30 00:33:15
【问题描述】:

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

|客户编号 |订单编号 |订购日期

如何获取今天下单的所有客户?

OrderDate 也是 DateTime。

类似

SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today

但最后一部分是我想不通的。

【问题讨论】:

    标签: sql datetime select


    【解决方案1】:

    只想要一个日期时间之外的日期是很常见的 - 您应该能够在 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)
    

    【讨论】:

      【解决方案2】:

      在 Oracle 中,该语句类似于:

      SELECT DISTINCT CustomerID  
      FROM TableName  
      Where OrderDate >= trunc(sysdate)
      

      SQL-Server 应该类似

      【讨论】:

      • SQL Server 没有trunc 语句。
      • 哇。下次我面试候选人时,我必须记住这一点。每隔几个月,我就会采访某人并听到诸如“SQL 就是 SQL”之类的话。他们多年来一直使用 SQL Server 似乎并不重要,而我们是一家 Oracle 商店。
      【解决方案3】:
      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

      【讨论】:

        猜你喜欢
        • 2010-09-24
        • 2011-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多