0

我有一个查询:

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

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

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

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

我怎样才能让它自己也采取结束日期?

4

5 回答 5

2

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

'2012-07-30 23:59:59'
于 2012-07-31T23:27:00.337 回答
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

它同样适用于DATE,DATETIMETIMESTAMP数据类型。

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

有关详细说明,请阅读这篇不错的博客文章:

BETWEEN 和魔鬼有什么共同点?

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

于 2012-07-31T23:38:20.620 回答
0

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

  BETWEEN('2012-07-28', DATE_ADD('2012-07-30', INTERVAL 1 DAY)
于 2012-07-31T23:26:58.147 回答
0

你为什么不简单地使用

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

于 2012-07-31T23:27:42.543 回答
0

只是为了在执行此操作 (min <= expr AND expr <= max) 之间添加更多信息,从这里获取

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

于 2012-08-01T00:28:14.870 回答