每个人,我都有一个名为 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的数据,那我该怎么做来获取两个日期的数据呢? 谁能帮我吗?
答案 0 :(得分:1)
您的WHERE
子句中的逻辑已关闭。使用以下内容定位6月27日和28日:
WHERE o.date_created >= '2018-06-27' AND o.date_created < '2018-06-29'
o.date_created <= '2018-06-28'
的问题在于,它意味着6月28日午夜或更早的任何日期,即基本上完全排除了28日。相反,我使用了o.date_created < '2018-06-29'
,其中包括6月28日的整个一天。
答案 1 :(得分:1)
要获得预期结果,请更改WHERE o.date_created >= '2018-06-27' AND o.date_created < '2018-06-29'
上查询中的where语句
当字段 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'
答案 2 :(得分:0)
尝试一下
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'