我的表中有日期和时间列。我想选择日期和时间大于当前时间加一小时的所有对象:
我尝试了以下方法:
SELECT * FROM mytable WHERE date >= CURDATE() AND time >= TIME(NOW()+INTERVAL 1 hour)
然而这在逻辑上是不正确的。如果日期是明天并且时间小于当前的 HH:MM,它将不会选择该记录。如何使用我的日期和时间与当前日期时间进行比较?我正在使用 php 5.2 和 mysql
首先,我建议使用 DATETIME 列来使此过滤更有效。但是,如果您无法更改,则此方法有效:
SELECT * FROM mytable
WHERE (date = CURDATE() AND time >= TIME(NOW() + INTERVAL 1 hour))
OR date > CURDATE()
您可以将您的条件分为两个条件...
当日期等于今天并且比当前时间早一个多小时时:
date == CURDATE() AND time >= TIME(NOW()+INTERVAL 1 hour)
当日期大于今天时:
date > CURDATE()
OR
...并使用和括号将它们链接在一起:
SELECT * FROM mytable WHERE (date == CURDATE() AND time >= TIME(NOW()+INTERVAL 1 hour)) OR date > CURDATE()
首先检查日期是否是今天,如果时间大于当前时间。第二个条件是检查日期是否大于当前日期。因为如果日期大于当前日期,那么它的时间就会自动提前。
SELECT * FROM mytable
WHERE (date = CURDATE() AND time >= TIME(NOW() + INTERVAL 1 hour))
OR date > CURDATE()
SELECT * FROM mytable WHERE date >= CURDATE() AND time >= TIME(HOUR(NOW()) + 1);
或者也许只是
SELECT * FROM mytable WHERE date >= CURDATE() AND time >= HOUR(NOW()) + 1;
你可以这样做。
SELECT
*
FROM
mytable
WHERE
CONCAT( date, " ", time ) > (NOW() + INTERVAL 1 HOUR );
我个人建议您摆脱日期和时间的单独字段并创建一个合并的“日期时间”字段。我还建议在该字段中添加一个 INDEX。
这将使您的查询更好更快。:)
正如@Pekka 所指出的,到目前为止发布的所有答案都会在晚上 11 点到午夜之间给出错误的答案。我不使用 MySQL,但我可以查找资料。更好的方法似乎是 timestamp() 函数。
该参考文献指出:
With two arguments, it adds the time expression expr2 to the date
or datetime expression expr1 and returns the result as a datetime value.
为什么不使用带两个参数的 timestamp()?