Каждый, у меня есть одна таблица, названная в качестве заказов, которая содержит одно из полей с именем 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, так что мне делать, чтобы получать данные обеих дат? Кто-нибудь может мне помочь, пожалуйста?
Логика в вашем 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'
Эта проблема может возникнуть, когда поле date_created имеет тип DateTime, потому что происходит неявный разговор. Это означает, что значения интерпретируются DB как 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' AND o.date_created <'2018-06-29'