MYSQL выберите дату в течение этого дня - PullRequest
7 голосов
/ 30 марта 2012

Мой запрос выглядит так:

SELECT COUNT(entryID) 
FROM table 
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)

Будет ли учитываться количество строк, значения date которых равны в течение дня (начиная с 12:00; не в течение 24 часов)?Если нет, то как мне это сделать?

Ответы [ 3 ]

12 голосов
/ 30 марта 2012

Для получения записей за текущий день должно быть достаточно:

SELECT COUNT(entryID) 
FROM table 
WHERE date >= CURDATE()

Как отмечает Майкл в комментариях, он просматривает все записи за последние два дня в своей текущей форме.

Оператор >= необходим, только если date на самом деле datetime - если это просто тип date, то достаточно =.

2 голосов
/ 30 марта 2012

Вот решение:

SELECT COUNT(entryID) FROM table WHERE DATE(date) >= CURDATE()

Поскольку мой столбец date имеет тип DATETIME, я использую DATE(date), чтобы получить только часть даты, а не часть времени.

1 голос
/ 30 марта 2012

CURDATE () возвращает дату, например «2012-03-30», а не метку времени, например «2012-03-30 21:38:17». Вычитание одного дня также возвращает только дату, а не метку времени. Если вы хотите рассматривать дату как метку времени, подумайте о ней как о начале этого дня, то есть времени «00: 00: 00».

И это причина, почему это

WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)

и это

WHERE date > CURDATE()

сделать то же самое.

У меня есть еще одна подсказка: SELECT COUNT(entryID) и SELECT COUNT(*) дают тот же результат. SELECT COUNT(*) дает машине базы данных больше возможностей для оптимизации подсчета, поэтому COUNT(*) часто (не всегда) быстрее, чем COUNT(field).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...