这是关于时间安排的。用户选择 1 个日期时间,我需要将它与数据库进行比较,如果我在那个时间和 +-2 小时(四舍五入)没有其他东西的话。..
两个日期时间都以 SQL "DATETIME"格式保存 (yyyy-dd-mm hh:mm:ss)
条件是:user-DATETIME 不能多于或少于 1 小时和 59 分钟(7199 秒)作为 DB-DATETIME
我尝试以下操作:
SELECT event FROM schedule
WHERE '2014-08-02 12:00:00' > DATE_ADD(event, INTERVAL -7199 SECOND) OR
WHERE '2014-08-02 12:00:00' < DATE_ADD(event, INTERVAL +7199 SECOND)
此示例中的固定日期时间用于检查.. 真正的日期时间在字符串 $_COOKIE["userdt"] 中。很确定我很接近,但无法完成。
最佳答案
编写查询的正确方法是:
SELECT event
FROM schedule
WHERE '2014-08-02 12:00:00' > DATE_ADD(event, INTERVAL -7199 SECOND) AND
'2014-08-02 12:00:00' < DATE_ADD(event, INTERVAL +7199 SECOND)
这改变了 or
到and
并删除第二个 where
.
但是,我认为编写查询的更好方法是:
SELECT event
FROM schedule
WHERE event > DATE_ADD('2014-08-02 12:00:00', INTERVAL -2 hour) and
event < DATE_ADD('2014-08-02 12:00:00', INTERVAL +2 hour);
这些变化有多种原因。一、interval 2 hour
比 interval 7199 second
更容易理解.它阐明了查询在做什么。 >
和 <
基本上实现相同的逻辑(好吧,两端有一秒的差异,但我的猜测是这并不重要)。
其次,尝试养成对 where
中的“常量”而不是“列”进行转换的习惯。条款,当你很容易可以。这允许 MySQL 在 event
上使用索引用于查询。当event
首先由函数处理,MySQL 不会(通常)在该列上使用索引。
关于MySQL 将两个日期时间与 date_add 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21602844/