MySQL,如果两个日期和时间之间相隔2个小时

时间:2019-01-21 06:05:22

标签: mysql

这是我要弄清楚的一个难题。

这是我的桌子:

task_reminders
    - id
    - date
    - time

我想要SELECT ALL行,其日期和时间在当前(NOW)日期和时间(UTC)之后3小时。这很困难,因为日期和时间列是分开的。

示例:

例如,如果当前日期和时间是2019-01-20 08:30:00,那么我想选择所有日期和时间都在该时间之后3小时(仅计算小时数)的行。

2019-01-20 11:50:00 this would work
2019-01-20 11:10:00 this would work too

2019-01-20 10:00:00 would NOT work
2019-01-20 12:00:00 would NOT work

另一个示例:如果当前日期和时间为2019-01-19 11:20:00,则这些日期和时间将无法使用:

2019-01-20 02:50:00 this would work
2019-01-20 02:30:00 this would work too

2019-01-20 01:10:00 would NOT work
2019-01-20 03:45:00 would NOT work

这有点困难,因为DATETIME在我的数据库中是分开的。我该怎么办?谢谢!

3 个答案:

答案 0 :(得分:1)

签出此选项,它将比较日期和小时,但根据需要跳过时间和秒数

SELECT *
FROM task_reminders
WHERE DATE_FORMAT(CAST(CONCAT(`edate`, ' ', `etime`) AS DATETIME), '%Y-%m-%d %H') >=
DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 3 HOUR) , '%Y-%m-%d %H')

请通过http://www.sqlfiddle.com/#!9/9bec7a/1检查sqlfiddle

答案 1 :(得分:1)

由于您只希望小时数彼此相差3,因此可以检查2种情况:

  1. HOUR(NOW())是<21,在这种情况下,日期应该和HOUR(time) = HOUR(NOW()) + 3相同;或
  2. HOUR(NOW())> = 21,在这种情况下,日期应比CURDATE()HOUR(time) = HOUR(NOW())-21`
  3. 多1。

所以您的查询将是:

SELECT *
FROM task_reminders
WHERE HOUR(`time`) = HOUR(NOW()) +  3 AND `date` = CURDATE() OR
      HOUR(`time`) = HOUR(NOW()) - 21 AND `date` = CURDATE() + INTERVAL 1 DAY

注意

  1. 经过数小时的整理,在查询中无需包括与HOUR(NOW())相对于21的条件
  2. 我假设您的datetime列的数据类型分别为DATETIME

答案 2 :(得分:-1)

使用此查询并替换表和变量名

$result = mysqli_query($con,"SELECT sent_date FROM invitations WHERE email='$email' AND uid='$session_uid' AND `sent_date` < SUBDATE( CURRENT_DATE, INTERVAL 3 HOUR)");