【问题标题】:Records between NOW() and 3am today or yesterdayNOW() 和今天或昨天凌晨 3 点之间的记录
【发布时间】:2015-12-17 12:56:18
【问题描述】:

如何获取 NOW() 和之前凌晨 3 点之间的表中的记录?

如果是上午 9 点,这会很容易,但如果是凌晨 2 点,我该怎么写呢?即我想要 DATE_SUB(CURDATE(), INTERVAL 21 HOURS) 和 NOW() 之间的交易。我正在寻找一些代码,它可以同时执行这两种操作,而无需检查用户代码中的时间并在两个 sql 语句之间进行选择。

我确信有一个简单的解决方案,但它让我望而却步。

【问题讨论】:

    标签: mysql datetime between


    【解决方案1】:

    一个简单的想法是减去三个小时并比较日期:

    where date(date_sub(col, interval 3 hour)) = (case when hour(date) >= 3 then curdate() else date_sub(curdate(), interval 1 day)
    

    或者,更明确地说,只是在 SQL 中进行比较:

    where (hour(date) >= 3 and date(col) = curdate()) or
          (hour(date) < 3 and date(col) = date_sub(curdate(), interval 1 day)
    

    【讨论】:

    • 是的,我喜欢这个减去 3 小时的想法。它让我们重新思考发生在一天而不是凌晨 3 点到 3 点之间的所有交易。
    【解决方案2】:

    我将添加我自己的答案(我最终放弃并使用 IF 进行了探索,发现它可以在 SELECT 语句中使用),但@Gordon Linoff 可能会更好——我不知道其中哪个更快。

    SELECT IF (NOW() > DATE_ADD(CURDATE(), INTERVAL 3 HOUR),
               DATE_ADD(CURDATE(), INTERVAL 3 HOUR),
               DATE_SUB(CURDATE(), INTERVAL 21 HOUR))
    

    然后可以用作外部 SELECT 的条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      相关资源
      最近更新 更多