MySQL – выбор данных из базы данных между двумя датами

Я сохранил даты регистрации пользователя как дату, так, например, 2011-12-06 10:45:36 . Я запустил этот запрос, и я ожидал, что этот элемент – 2011-12-06 10:45:36 – будет выбран:

SELECT `users`.* FROM `users` WHERE created_at >= '2011-12-01' AND created_at <= '2011-12-06' 

Но нет. Существует какой-либо элегантный способ, как выбрать этот элемент? В качестве первой идеи, которую я получил, было похоже на 2011-12-06 + 1 , но это выглядит не очень хорошо.

Ваша проблема в том, что короткая версия дат использует полночь в качестве значения по умолчанию. Таким образом, ваш запрос:

 SELECT users.* FROM users WHERE created_at >= '2011-12-01 00:00:00' AND created_at <= '2011-12-06 00:00:00' 

Вот почему вы не видите запись за 10:45.

Измените его на:

 SELECT users.* FROM users WHERE created_at >= '2011-12-01' AND created_at <= '2011-12-07' 

Вы также можете использовать:

 SELECT users.* from users WHERE created_at >= '2011-12-01' AND created_at <= date_add('2011-12-01', INTERVAL 7 DAY) 

Который выберет всех пользователей за тот же промежуток времени, который вы ищете.

Вы также можете найти оператор BETWEEN более читаемым:

 SELECT users.* from users WHERE created_at BETWEEN('2011-12-01', date_add('2011-12-01', INTERVAL 7 DAY)); 
 SELECT users.* FROM users WHERE created_at BETWEEN '2011-12-01' AND '2011-12-07'; 

Вы должны использовать ‘2011-12-07’ в качестве конечной точки в качестве даты без времени, установленного по умолчанию 00:00:00.

Итак, то, что вы на самом деле написали, интерпретируется как:

  SELECT users.* FROM users WHERE created_at >= '2011-12-01 00:00:00' AND created_at <= '2011-12-06 00:00:00' 

И ваш штамп времени: 2011-12-06 10:45:36, который не находится между этими точками.
Измените это тоже:

  SELECT users.* FROM users WHERE created_at >= '2011-12-01' -- Implied 00:00:00 AND created_at < '2011-12-07' -- Implied 00:00:00 and smaller than -- thus any time on 06 

Вы пробовали до и после, а не> = и <=? Кроме того, это дата или временная метка?

Другой альтернативой является использование функции DATE() в левом операнде, как показано ниже

 SELECT users.* FROM users WHERE DATE(created_at) BETWEEN '2011-12-01' AND '2011-12-06' 

Поиск created_at <= '2011-12-06' будет искать любые записи, которые были созданы до или до полуночи 2011-12-06. Вы хотите найти created_at < '2011-12-07' .

Может быть, лучше использовать между ними. Это помогло мне получить диапазон, затем отфильтровать его

Вы можете использовать функцию MySQL DATE как DATE ниже.

Например, если вы хотите получить результаты с 2017-09-05 по 2017-09-09

 SELECT DATE(timestamp_field) as date FROM stocks_annc WHERE DATE(timestamp_field) >= '2017-09-05' AND DATE(timestamp_field) <= '2017-09-09' 

Обязательно заверните даты в одинарной кавычке ''

Надеюсь это поможет.

  • Запрос сводной таблицы MySQL с динамическими столбцами
  • Как удалить ведущие и конечные пробелы в поле MySQL?
  • Как оптимизировать производительность COUNT (*) в InnoDB с помощью индекса
  • Нарушение внешнего ключа Bogus не выполняется
  • BULK INSERT в MYSQL
  • Почему автоинкремент MySQL увеличивается при неудачных вставках?
  • com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Ошибка связи канала связи
  • Вызывать толкатель, когда mysql изменился
  • ASP.NET использует SqlConnection connect MySQL
  • Оператор SQL игнорирует, где параметр
  • что «= null» и «IS NULL»
  • Interesting Posts

    Получить последние 5 не нулевых значений в строке

    В чем разница между .ToList (), .AsEnumerable (), AsQueryable ()?

    Как проверить, является ли строка числовой?

    Не удается получить доступ к виртуальной машине через ping с физической хост-машины

    Dell xps m1330: ошибка аппаратного сбоя

    Python 2.7: streamовый HTTP-сервер, поддерживающий несколько соединений на одном порту

    Как я могу использовать условие для установки значения переменной в Ansible?

    Получить другой процесс argv в OS X, используя C

    Как визуализировать изображение камеры YUV-NV21 на фоне в libgdx с OpenGLES 2.0 в режиме реального времени?

    Создать случайную дату рождения

    Неверная операция поперечного streamа: Control ‘textBox1’, доступ к которому осуществляется из streamа, отличного от streamа, который был создан на

    Ошибка драйвера драйвера VirtualBox

    Как создать сертификат для моего Android Market APK?

    Разница между Console.Read () и Console.ReadLine ()?

    Как разместить один элемент относительно другого с помощью jQuery?

    Давайте будем гением компьютера.