Я пытаюсь запустить оператор выбора 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()
signup_date
это поле datetimesignup_date
если он содержит время, тогда вы захотите использовать date_format вWHERE
предложении, чтобы разделить время, чтобы оно соответствовалоCURDATE()
mysql_num_rows
не отображает 0. Просто пробел.Ответы:
SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') FROM users WHERE DATE(signup_date) = CURDATE()
источник
DATETIME
.signup_date
, даже если такой индекс существует). Предпочитаю раствор Серхио .< '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)
источник
signup_date
, в отличие от других подходов.signup_date
между двумя значениями времени верна, но время - нет. Оно должно быть между00:00
и23:59:59
на текущую дату.WHERE DATE(signup_date) = CURDATE()
Взял мой сервер ~ 50 мс, это один здесь 0,8 мс.Похоже, вам нужно добавить форматирование в
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 с демонстрацией
источник
Вы можете использовать
CONCAT
withCURDATE()
для всего времени дня, а затем отфильтровать, используя условиеBETWEEN
inWHERE
:SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') FROM users WHERE (users.signup_date BETWEEN CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59'))
источник