MySQL запрос для получения только записей с start_date> now ()

0

Я пытаюсь получить все записи, где start_date больше текущей метки времени. Любые идеи, почему это может не работать:

WHERE (UNIX_TIMESTAMP(event_dates.start_date)) > DATE(NOW())

и это пример столбца start_date 2010-10-30

Теги:

2 ответа

5
Лучший ответ
  • UNIX_TIMESTAMP возвращает целое число со вторым с эпохи
  • DATE() возвращает строку типа 'yyyy-mm-dd'

Сравнение этих 2 приводит к неожиданным результатам, я уверен. Используйте либо UNIX_TIMESTAMP, либо DATE, но делайте это для обоих. (или выполните UNIX_TIMESTAMP(DATE(NOW())), чтобы сравнить правильные форматы.

  • 0
    спасибо, ребята, это немного глупо с моей стороны
1

Вы сравниваете значение даты (yyyy-mm-dd) с эпохой UNIX, поэтому ваш запрос не работает.

Просто убедитесь, что вы используете правильные типы данных для соответствующего случая. Вам нужны даты, используйте дату или дату, а не временную метку. Плюс тот факт, что столбец timestamp в таблице MySQL имеет специальные свойства.

Также используйте индекс в столбце этой даты. Ваш запрос не будет оптимизирован из-за функции now() в предложении where. Попытайтесь сначала получить значение now в переменной и запустить запрос с использованием этой переменной, тогда оптимизатор MySQL будет иметь возможность оптимизировать ваш запрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню