проблема при получении данных в MySQL - PullRequest
0 голосов
/ 28 июня 2018

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

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, так что мне делать, чтобы получить данные за обе даты? кто-нибудь может мне помочь?

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

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

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

0 голосов
/ 28 июня 2018

Попробуйте это

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' </p>

0 голосов
/ 28 июня 2018

Логика в вашем предложении 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 июня.

...