【问题标题】:issue in fetching data in MySQL在 MySQL 中获取数据的问题
【发布时间】:2018-12-07 03:50:45
【问题描述】:
大家,我有一个名为 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 的数据,那么我应该怎么做才能获取两个日期的数据?
谁能帮帮我?
【问题讨论】:
标签:
java
mysql
sql
sql-server
mysql-workbench
【解决方案1】:
试试这个
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
【解决方案2】:
要获得预期结果,请更改 WHERE o.date_created >= '2018-06-27' AND o.date_created < '2018-06-29' 查询中的 where 语句
当字段 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'
【解决方案3】:
WHERE 子句中的逻辑已关闭。使用以下方法来定位 6 月 27 日和 6 月 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 日的一整天。