【问题标题】:Select records from NOW() -1 Day从 NOW() -1 天选择记录
【发布时间】:2012-01-22 14:04:02
【问题描述】:

在 MySQL 语句中是否可以通过 >= NOW() -1 对记录进行排序(通过日期戳),以便选择从前一天到未来的所有记录?

【问题讨论】:

    标签: mysql select where datestamp


    【解决方案1】:

    根据documentation for date/time functions 判断,您应该能够执行以下操作:

    SELECT * FROM FOO
    WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY
    

    【讨论】:

    • 如何从现在到等等.. 表示数据库中所有可用记录的当前日期。 ?这只是一天,但我现在需要把所有的记录都记录下来。 @乔恩
    • 记录为UTC时是否考虑用户的本地时间?
    • @Adry:我怀疑,但你应该仔细测试。
    【解决方案2】:

    请注意,结果可能与您的预期略有不同。

    NOW() 返回一个DATETIME

    并且INTERVAL 按名称工作,例如INTERVAL 1 DAY = 24 hours

    因此,如果您的脚本在 03:00 处运行,它将错过 first three hours of records from the 'oldest' day

    要获得一整天的时间,请使用CURDATE() - INTERVAL 1 DAY。无论脚本何时运行,这都会返回到前一天的开始。

    【讨论】:

      【解决方案3】:

      你就快到了:它是NOW() - INTERVAL 1 DAY

      【讨论】:

        【解决方案4】:

        使用DATE_ADDDATE_SUB 没有正确看到任何答案:

        NOW() 中减去 1 天

        ...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)
        

        NOW()添加 1 天

        ...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)
        

        【讨论】:

        • 看起来“更干净”,不知何故,但也有点“沉重”。显式调用方法而不是使用简单的加法/减法真的有任何附加值吗?
        【解决方案5】:

        当然可以:

        SELECT * FROM table
        WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
        

        【讨论】:

        • 混淆使用DATE_ADD 然后-1 day
        【解决方案6】:

        当搜索字段是时间戳并且您想查找昨天 0 小时和今天 0 小时的记录时使用构造

        MY_DATE_TIME_FIELD between makedate(year(now()), date_format(now(),'%j')-1) and makedate(year(now()), date_format(now(),'%j'))  
        

        改为

         now() - interval 1 day
        

        【讨论】:

          猜你喜欢
          • 2012-11-04
          • 2011-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-02
          • 2021-09-28
          • 1970-01-01
          相关资源
          最近更新 更多