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

66

Я пытаюсь выполнить оператор выбора 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()

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

Ваш Ответ

3   ответа
143
SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
FROM users 
WHERE DATE(signup_date) = CURDATE()
нужно ли использовать DATE (), даже если поле имеет тип Date?
Разобрался со мной прямо сейчас! Ура!
@SumitMAsok Лучше использовать< '2017-08-31 00:00:00' в случае, если вы используете версию MySQL с миллисекундами.
@rashidnk Нет. Хотя он не сказал четко в вопросе, поле, по-видимому, имеет типDATETIME.
Хотя это решение является абсолютно правильным, оно плохо масштабируется (не может использовать индекс наsignup_date, даже если такой индекс существует). предпочитатьSerjio's solution.
22

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)
@ Бармар Да, ты прав. Я исправил ответ.
@RandomSeed Общая идея тестирования дляsignup_date между двумя правильными временами, но временами нет. Должно быть между00:00 а также23:59:59 на текущую дату.
Ну, интервал дат тоже был неверным & gt;. & Lt; В конце концов, отрицательные голоса не были такими абсурдными.
Понижение этого ответа абсурдно. Это на самом деле предпочтительный подход, потому что этот запрос сможет использовать индекс наsignup_dateВ отличие от других подходов.
11

Похоже, вам нужно добавить форматирование в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 с демоверсией

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

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