NOW()和今天或昨天凌晨3点之间的记录

时间:2015-12-17 12:56:18

标签: mysql datetime between

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

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

我确定这是一个简单的解决方案,但它让我不知所措。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我会添加自己的答案(我最终放弃并使用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的条件。