我有一个事件日历表,我想选择日期等于或大于今天的事件。当我使用以下SELECT语句时,它只检索将来的事件(> NOW()):
<?php
$db->query("SELECT * FROM events WHERE event_date >= NOW()");
?>
我如何选择今天或将来的所有活动?
谢谢
答案 0 :(得分:40)
您正在寻找CURDATE()
:
$db->query("SELECT * FROM events WHERE event_date >= CURDATE()");
或者:
$db->query("SELECT * FROM events WHERE event_date >= CURRENT_DATE()");
答案 1 :(得分:15)
此查询的原因:
SELECT * FROM events WHERE event_date >= NOW()
...从未来返回记录,是因为NOW()包括时间和日期。该时间部分表示[function或triggering]语句开始执行的时间。这意味着DATETIME数据类型中的一天开始看起来像:2010-06-24 00:00:00
(YYYY-MM-DD HH:MM:SS,精确到微秒),NOW()会显示类似{{1}的内容} ...
以下是您的选择:
2010-06-24 14:24:31
答案 2 :(得分:2)
您也可以
<?php
$db->query("SELECT * FROM events WHERE UNIX_TIMESTAMP(event_date) >= UNIX_TIMESTAMP(NOW())");
?>
如果您使用时间和日期
,则比使用CURTIME()更准确答案 3 :(得分:1)
如果您只关心日期而不是时间,请使用CURDATE()代替NOW()
。
当然,您也可以使用同义词CURRENT_DATE
(后面带括号或不带括号),但我指出的文档会将CURDATE
作为第一个拼写; - )。
答案 4 :(得分:0)
您的问题是now()非常准确。所以今天和之前的日期是因为它们是从当天开始的。
使用此:
select * from events where datediff(event_date, now()) >= 0;
答案 5 :(得分:0)
这里是CURDATE和NOW之间的区别:
mysql> select CURDATE();
+------------+
| CURDATE() |
+------------+
| 2017-03-17 |
+------------+
1 row in set (0.03 sec)
mysql> select NOW();
+---------------------+
| NOW() |
+---------------------+
| 2017-03-17 09:04:45 |
+---------------------+
1 row in set (0.00 sec)
我总是使用NOW只是为了准确