这是我要弄清楚的一个难题。
这是我的桌子:
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
这有点困难,因为DATE
和TIME
在我的数据库中是分开的。我该怎么办?谢谢!
答案 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种情况:
HOUR(NOW())
是<21,在这种情况下,日期应该和HOUR(time) = HOUR(NOW()) + 3
相同;或HOUR(NOW())
> = 21,在这种情况下,日期应比CURDATE()
和HOUR(time) =
HOUR(NOW())-21` 所以您的查询将是:
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
注意
HOUR(NOW())
相对于21的条件date
和time
列的数据类型分别为DATE
和TIME
。答案 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)");