Проблема с получением данных в MySQL

Все, у меня есть одна таблица с именем заказы, которая содержит одно из ее полей с именем Дата создания. Теперь я хочу получить данные из определенного диапазона дат. Прилагаю код:

SELECT * FROM
orders o,
accounts_store a WHERE  o.date_created >= '2018-06-27' AND o.date_created <= '2018-06-28'
    AND a.account_id = '1'
    AND a.store_id = '1'

Но это извлекает данные единственной даты 2018-06-27. Я не получаю данные за 2018-06-28, так что мне делать, чтобы получить данные за обе даты? Может кто-нибудь мне помочь?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
58
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Логика в вашем предложении WHERE отключена. Используйте следующее для нацеливания на 27 а также 28 июня:

WHERE o.date_created >= '2018-06-27' AND o.date_created < '2018-06-29'

Проблема с o.date_created <= '2018-06-28' заключается в том, что он означает любую дату не ранее полночь 28 июня, то есть полностью исключает 28-е число. Вместо этого я использовал o.date_created < '2018-06-29', который включает весь день 28 июня.

Чтобы получить ожидаемый результат, измените оператор where в запросе на WHERE o.date_created >= '2018-06-27' AND o.date_created < '2018-06-29'.

Эта проблема может возникнуть, когда поле Дата создания имеет тип DateTime, потому что происходит неявный диалог. Это означает, что значения интерпретируются БД как WHERE o.date_created >= '2018-06-27 00:00:00:000' AND o.date_created <= '2018-06-28 00:00:00:000'

Попробуй это

SELECT * FROM
orders o,
accounts_store a WHERE  o.date_created >= '2018-06-27' AND DATE_FORMAT(o.date_created, '%Y-%m-%d') <= '2018-06-28'
    AND a.account_id = '1'
    AND a.store_id = '1'

Если у вас есть индекс для date_created, то указанный выше запрос не будет использовать этот индекс. В этом случае лучше использовать следующее условие o.date_created> = '2018-06-27' И o.date_created <'2018-06-29'

Другие вопросы по теме