4

我有第一个查询

select count(*)
from `order`
where marketer_id = 75 and
      HandleStatus != -1 and
      (Created_at BETWEEN '2017-05-01' AND '2017-05-31')

结果是1050

我还有第二个查询:

select count(*)
from `order`
where marketer_id = 75 and
      HandleStatus != -1 and
      (Month(Created_at) =5 and Year(Created_at) = 2017)

结果是1111

我认为 2 个查询具有相同的含义,但它返回 2 个不同的结果。关于“Created_at”列的信息:COLUMN_NAME Created_at、COLUMN_TYPE 时间戳、IS_NULLABLE NO、COLUMN_KEY、COLUMN_DEFAULT CURRENT_TIMESTAMP

请帮忙 2个查询有什么区别?

4

3 回答 3

7

如果考虑一天内的时间,第一个查询只返回 2017-05-31 00:00:00 之前的结果。如果您在 2017-05-31 00:00:00 之后和 2017-05-31 23:59:59 之前(也可能低至毫秒)有任何结果,它们只会出现在第二个查询中。

于 2017-06-05T05:04:52.013 回答
2

第一个查询不是查看 5 月 31 日,而是查看到 5 月 30 日。没有时间组件意味着时间被视为午夜,或 31 日的开始。

于 2017-06-05T05:05:28.247 回答
1

之间只需要“2017-05-30 23:59:59”和 2017-05-01 00:00:00 之后。它不应该考虑第 31 天。

如果您希望第一个查询返回与第二个查询相同的数据,您可以像这样使用

select count(*)
from `order`
where marketer_id = 75 and
      HandleStatus != -1 and
      (Created_at >= '2017-05-01' AND Created_at < '2017-06-01')
于 2017-06-05T05:15:16.103 回答