有什么区别

时间:2017-06-05 04:59:58

标签: mysql sql sql-timestamp

我有第一个查询

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查询有什么区别?

3 个答案:

答案 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')