我想使用 MySQL 根据两个不同的日期过滤一些项目。在我的数据库中,我存储了类似 2017-03-28 10:55:10
的数据。但我只需要日期部分,不需要时间,所以我使用了 DATE()
函数:
select sum(cashamount) as sumcashsalesamount,
DATE(transactiondate) as datepart
from master_transaction
where transactiondate BETWEEN '2017-02-22%' AND '2017-03-28%'
order by transactiondate desc
此查询上方有两个日期 2017-02-22%
和 2017-03-28%
但这没有返回任何结果。
但是当我将此 2017-03-28%
日期更改为 2017-03-29%
(明天日期)时,我得到了结果。
最佳答案
不要将 between
与“日期”一起使用。我将其放在引号中,因为您的值实际上是日期时间值。
这个条件最好的写法是:
where transactiondate >= '2017-02-22' and
transactiondate < '2017-03-29'
注意第二个条件的不等式。 BETWEEN
包含在内,因此它将包括 2017 年 3 月 28 日的午夜。
为什么这是最好的?
- 它允许查询优化器利用索引和分区。
- 这正是您想要的逻辑。
- 它适用于
date
和datetime
类型。
关于php - Mysql 中的日期之间无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43067424/