Выбирая записи по дате-> = ТЕПЕРЬ (), MySQL

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

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

Как я пошел бы о выборе всех событий, которые являются или сегодня или в будущем?

Спасибо

28
задан OMG Ponies 25 June 2010 в 01:01
поделиться

4 ответа

Вы ищете CURDATE () :

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

Или:

$db->query("SELECT * FROM events WHERE event_date >= CURRENT_DATE()");
43
ответ дан 28 November 2019 в 02:55
поделиться

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

SELECT * FROM events WHERE event_date >= NOW()

... возвращает записи из будущего, заключается в том, что NOW () включает время, а также дату. И эта временная часть указывает время, когда оператор [функция или запуск] начал выполняться. Это означает, что начало дня в типе данных DATETIME выглядит так: 2010-06-24 00:00:00 (ГГГГ-ММ-ДД ЧЧ: ММ: СС, с точностью до микросекунд), что 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()
16
ответ дан 28 November 2019 в 02:55
поделиться

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

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

1
ответ дан 28 November 2019 в 02:55
поделиться

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

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

select * from events where datediff(event_date, now()) >= 0;
0
ответ дан 28 November 2019 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: