MySQL Выберите дату, равную сегодняшнему

Я пытаюсь выполнить оператор выбора mysql, где он смотрит на сегодняшнюю дату и возвращает только результаты, которые были зарегистрированы в этот текущий день. В настоящее время я пробовал следующее, но, похоже, это не работает.

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
    FROM users 
    WHERE users.signup_date = CURDATE()

Я изменил мойSELECT Заявление об этом, спасибо, ребята.

SELECT id FROM users WHERE DATE(signup_date) = CURDATE()

 Sergii Stotskyi01 окт. 2012 г., 19:02
Кажется, чтоsignup_date поле даты и времени
 Taryn♦01 окт. 2012 г., 19:04
какой тип данныхsignup_date если оно содержит время, то вы захотите использовать date_format вWHERE пункт, чтобы лишить время, чтобы соответствоватьCURDATE()
 Jako01 окт. 2012 г., 19:06
@bluefeet спасибо, я изменил свой сценарий. Вроде работает, но когда нет результатов.mysql_num_rows не отображает 0. Просто пусто.
 Jako01 окт. 2012 г., 19:03
@Serjio Да, в настоящее время это поле даты и времени.

Ответы на вопрос(3)

Решение Вопроса
SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
FROM users 
WHERE DATE(signup_date) = CURDATE()
 07 авг. 2015 г., 12:34
нужно ли использовать DATE (), даже если поле имеет тип Date?
 30 авг. 2017 г., 16:49
Разобрался со мной прямо сейчас! Ура!
 21 окт. 2015 г., 10:01
Хотя это решение является абсолютно правильным, оно плохо масштабируется (не может использовать индекс наsignup_date, даже если такой индекс существует). предпочитатьSerjio's solution.
 07 авг. 2015 г., 15:28
@rashidnk Нет. Хотя он не сказал четко в вопросе, поле, по-видимому, имеет типDATETIME.
 26 окт. 2017 г., 17:56
@SumitMAsok Лучше использовать< '2017-08-31 00:00:00' в случае, если вы используете версию MySQL с миллисекундами.

signup_date поле

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
    FROM users 
    WHERE signup_date >= CURDATE() && signup_date < (CURDATE() + INTERVAL 1 DAY)
 21 окт. 2015 г., 12:17
Ну, интервал дат тоже был неверным & gt;. & Lt; В конце концов, отрицательные голоса не были такими абсурдными.
 21 окт. 2015 г., 10:03
Понижение этого ответа абсурдно. Это на самом деле предпочтительный подход, потому что этот запрос сможет использовать индекс наsignup_dateВ отличие от других подходов.
 21 окт. 2015 г., 11:56
@ Бармар Да, ты прав. Я исправил ответ.
 21 окт. 2015 г., 11:16
@RandomSeed Общая идея тестирования дляsignup_date между двумя правильными временами, но временами нет. Должно быть между00:00 а также23:59:59 на текущую дату.

Похоже, вам нужно добавить форматирование вWHERE:

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
FROM users 
WHERE DATE_FORMAT(users.signup_date, '%Y-%m-%d') = CURDATE()

УвидетьSQL Fiddle с демоверсией

 01 окт. 2012 г., 19:13
попрощайся со своим выступлением. Этот запрос никогда не использует индекс

Ваш ответ на вопрос