MySQL Between没有抓住结束日期?

时间:2012-07-31 23:24:04

标签: mysql

我有一个问题:

SELECT ... FROM orders WHERE date_created BETWEEN '2012-07-30' AND '2012-07-30'

虽然日期2012-07-30有1000多个条目,但它返回0个结果。 我发现BETWEEN根本没有抓住END日期,所以如果它是

BETWEEN '2012-07-28' AND '2012-07-30'

......它应该抓住我28,29但不是30的条目。

我怎样才能让它结束日期呢?

5 个答案:

答案 0 :(得分:2)

告诉它当天结束而不是开始。

'2012-07-30 23:59:59'

答案 1 :(得分:2)

永远不要将BETWEEN与日期一起使用(尤其是日期时间)。您可以使用:

WHERE date_created >= '2012-07-30' 
  AND date_created < '2012-07-31' 
---or:             < '2012-07-30' + INTERVAL 1 DAY
-------------------^-------------- notice the lack of the equal sign here

DATEDATETIMETIMESTAMP数据类型同样有效。

请注意,您可能仍会遗漏使用建议的BETWEEN '2012-07-30' AND '2012-07-30 23:59:59'解决方案的行。

有关详细说明,请阅读这篇精彩的博文:

<强> What do BETWEEN and the devil have in common?

该博客讨论了SQL-Server问题,但大多数关于BETWEEN的部分也适用于MySQL(除了尚未存在的毫秒支持,而不是@Ignacio用于更正)。

答案 2 :(得分:0)

在查询中的结束日期添加一天:

  BETWEEN('2012-07-28', DATE_ADD('2012-07-30', INTERVAL 1 DAY)

答案 3 :(得分:0)

为什么不简单地使用

... WHERE date_created ='2012-07-30'

答案 4 :(得分:0)

只是为了添加更多信息 在这之间完成这个(min&lt; = expr AND expr&lt; = max),从here得到它

正如其他人指出的那样,你错过了时间,最好是时间戳,除非日期用于生日等事情