MySQL不会为< =运算符返回正确的数据

时间:2016-03-24 12:39:54

标签: mysql

我有以下MySQL查询:

select date(JoinTime), count(UniqueCallID) from Call2 where JoinTime >= '2016-03-10' and JoinTime <= '2016-03-15' group by day(JoinTime);

我得到的结果是:

| date(JoinTime) | count(distinct UniqueCallID) |
+----------------+------------------------------+
| 2016-03-10     |                           20 |
| 2016-03-11     |                           29 |
| 2016-03-12     |                            2 |
| 2016-03-13     |                            5 |
| 2016-03-14     |                           12 |

正如您所看到的那样,它没有返回2016-03-15的数据,即使我明确设置了>=运算符,因为我想包含2016-03-15。

我也尝试过这样的BETWEEN:

select date(JoinTime), count(UniqueCallID) from Call2 where JoinTime between '2016-03-10' and '2016-03-15' group by day(JoinTime);

结果是一样的。

为什么会这样?我该怎么做才能解决它?

2 个答案:

答案 0 :(得分:4)

由于您只是与日期进行比较,因此您需要将JoinTime转换为第一个日期

select date(JoinTime), count(UniqueCallID) 
from Call2 where date(JoinTime) between '2016-03-10' and '2016-03-15' 
group by day(JoinTime);

此外,由于可能有几个月相关,您应按年,月和日分组:

select date(JoinTime), count(UniqueCallID) 
from Call2 where date(JoinTime) between '2016-03-10' and '2016-03-15'     
group by year(JoinTime), month(JoinTime), day(JoinTime);

您使用它的方式,像

这样的条目
2016-03-15 12:21:32 
将检查

2016-03-15 00:00:00

所以不会包含它,因为它与<=条件不匹配。

答案 1 :(得分:3)

如果JoinTime属于DateTime类型,并且您没有提供“时间”。部分,MySql假设您的时间是午夜(&#39; 2016-03-10 00:00:00&#39;)。所以你要查看2016-03-10 00:00:00&#39;到2016-03-15 00:00:00&#39;这给你的结果。

一天之后再尝试,或者将mmm提供给日期。