【问题标题】:How do I get data between midnight today and NOW?如何在今天午夜和现在之间获取数据?
【发布时间】:2016-07-01 05:10:54
【问题描述】:

正如标题所示,我只是想在今天午夜和现在之间获取结果集。所以考虑到这篇文章的时间,我想要 06/30/16 00:00:00 和 06/30/16 15:52:00 之间的数据。为什么以下查询不返回任何内容?谢谢。

SELECT * FROM tableName
WHERE event_date >= TO_DATE(TRUNC(SYSDATE) || ' 00:00:00', 'DD-MON-YY HH24:MI:SS')
AND event_date <= TO_DATE(TRUNC(SYSDATE))

【问题讨论】:

  • 只做 event_date

标签: sql oracle


【解决方案1】:
SELECT *
FROM   tableName
WHERE  event_date BETWEEN TRUNC(SYSDATE) AND SYSDATE;

【讨论】:

    【解决方案2】:

    解决方法如下:

    SELECT * FROM tableName
    WHERE event_date >= TO_DATE(TRUNC(SYSDATE))
    

    我忘记了 TRUNC(**SYSDATE)** 本身被认为是午夜,除非另有说明,所以这可以解决问题。

    【讨论】:

    • TRUNC(SYSDATE) 已经是一个日期 - 如果您在其上使用 TO_DATE(),那么 Oracle 将使用 NLS_DATE_FORMAT 会话参数作为格式掩码隐式地将截断的 SYSDATE 转换为字符串,然后将此字符串传递给TO_DATE() 以将其转换回日期(再次使用NLS_DATE_FORMAT 作为格式掩码)。
    • SYSDATE 不是当天的午夜 - 它是当前服务器时间(包括小时、分钟和秒)。此外,如果在当前时间之后有结果,那么这将返回今天和将来的所有行。
    • TRUNC(SYSDATE) 返回什么?
    • TRUNC(date_value)(带有单个 DATE 参数)获取传入的日期并将其截断,以使小时、分钟和秒为零(即同一天的午夜)并返回该日期.所以TRUNC(SYSDATE) 将返回一个DATE,设置为服务器开启当天的午夜。
    • 没错,这就是我的意思。我将编辑上面的帖子以使其更清晰。
    猜你喜欢
    • 2020-09-30
    • 2021-09-23
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2011-10-14
    相关资源
    最近更新 更多