Подтвердить что ты не робот

Выбор записей по дате - >= NOW(), MySQL

У меня есть таблица Calendar of Events, и я хотел бы выбрать события с датами, равными или большими, чем сегодня. Когда я использую следующий оператор SELECT, он только извлекает события в будущем ( > NOW()):

<?php    
$db->query("SELECT * FROM events WHERE event_date >= NOW()");
?>

Как я могу выбрать все события, которые либо сегодня, либо в будущем?

Спасибо

4b9b3361

Ответ 1

Вы ищете CURDATE():

$db->query("SELECT * FROM events WHERE event_date >= CURDATE()");

Или:

$db->query("SELECT * FROM events WHERE event_date >= CURRENT_DATE()");

Ответ 2

Причина, по которой этот запрос:

SELECT * FROM events WHERE event_date >= NOW()

... возвращает записи из будущего, потому что NOW() включает время, а также дату. И эта временная часть указывает время, в которое начинает выполняться оператор [function or triggering]. Таким образом, начало дня в типе данных DATETIME выглядит так: 2010-06-24 00:00:00 (YYYY-MM-DD HH: MM: SS, до микросекундной точности), который NOW() будет показывать что-то вроде 2010-06-24 14:24:31...

Вот ваши варианты:

SELECT * FROM events WHERE event_date >= DATE(NOW())
SELECT * FROM events WHERE event_date >= DATE(CURRENT_TIMESTAMP)
SELECT * FROM events WHERE event_date >= CURRENT_DATE()
SELECT * FROM events WHERE event_date >= CURRDATE()

Ответ 3

Вы также можете сделать

<?php    
$db->query("SELECT * FROM events WHERE UNIX_TIMESTAMP(event_date) >=     UNIX_TIMESTAMP(NOW())");
?>

Что более точно, чем использование CURTIME(), если вы случайно используете время, а также дату

Ответ 4

Если вам нужна только дата, а не время, используйте CURDATE() вместо NOW().

Конечно, вы можете использовать синоним CURRENT_DATE (с или без круглых скобок после него), но документы, на которые я указал, чтобы дать CURDATE в качестве первого написания; -).

Ответ 5

Ваша проблема в том, что now() очень точен. Итак, даты на сегодняшний день и раньше, потому что они начались в начале дня.

Используйте это:

select * from events where datediff(event_date, now()) >= 0;

Ответ 6

Здесь разница между 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)

Я всегда использую СЕЙЧАС только для того, чтобы быть точным.