我有第一个查询
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&#34 ;: COLUMN_NAME Created_at,COLUMN_TYPE时间戳,IS_NULLABLE NO,COLUMN_KEY,COLUMN_DEFAULT CURRENT_TIMESTAMP
请帮助2查询有什么区别?
答案 0 :(得分:6)
如果您考虑一天内的时间,则第一个查询仅返回2017-05-31 00:00:00之前的结果。 如果您在2017-05-31 00:00:00之后和2017-05-31 23:59:59之前有任何结果(也可能在毫秒之内),它们只会显示在第二个查询中。
答案 1 :(得分:1)
第一个问题不是在5月31日,而是在5月30日之前。没有时间部分意味着时间被视为午夜或第31个月的开始。
答案 2 :(得分:0)
两者之间的确只需要达到' 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')