php - Mysql 中的日期之间无法正常工作

标签 php mysql sql

我想使用 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 日的午夜。

为什么这是最好的?

  • 它允许查询优化器利用索引和分区。
  • 这正是您想要的逻辑。
  • 它适用于 datedatetime 类型。

关于php - Mysql 中的日期之间无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43067424/

相关文章:

javascript - 将此函数完全转换为 jQuery

javascript - 合并更新两个独立 DIV 的 2 个 jquery 函数

php - Highcharts 自定义 PHP/MySQL

sql - 如何在postgresql中加入两个以上的表?

php - 在 PHP 中从数据库中删除 TinyMCE 格式

php - 提交后如何将 JS 变量传递给同一 PHP 文件中的后续 PHP?

mysql - 无法在具有相同列的 MySQL 中添加外键

mysql - 我应该选择哪个索引?(Mysql)

mysql - 优化我的长mysql查询

mysql - (STOREDPROC) 生成的 SELECT 语句 : looking for the right syntax to use near NULL