NOW() 和今天或昨天凌晨 3 点之间的记录
Records between NOW() and 3am today or yesterday
如何在 NOW() 和前一个凌晨 3 点之间的 table 中获取记录?
如果是上午 9 点,这会很容易,但如果是凌晨 2 点,我该如何写呢?即我想要 DATE_SUB(CURDATE(), INTERVAL 21 HOURS) 和 NOW() 之间的交易。我正在寻找一些可以同时执行这两项操作的代码,而无需检查用户代码中的时间并在两个 sql 语句之间进行选择。
我确定有一个简单的解决方案,但它让我望而却步。
一个简单的想法是减去三个小时并比较日期:
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)
我将添加我自己的答案(我最终放弃并探索使用 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.
的条件
如何在 NOW() 和前一个凌晨 3 点之间的 table 中获取记录?
如果是上午 9 点,这会很容易,但如果是凌晨 2 点,我该如何写呢?即我想要 DATE_SUB(CURDATE(), INTERVAL 21 HOURS) 和 NOW() 之间的交易。我正在寻找一些可以同时执行这两项操作的代码,而无需检查用户代码中的时间并在两个 sql 语句之间进行选择。
我确定有一个简单的解决方案,但它让我望而却步。
一个简单的想法是减去三个小时并比较日期:
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)
我将添加我自己的答案(我最终放弃并探索使用 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.
的条件