我有一个问题:
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的条目。
我怎样才能让它结束日期呢?
答案 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
与DATE
,DATETIME
和TIMESTAMP
数据类型同样有效。
请注意,您可能仍会遗漏使用建议的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得到它
正如其他人指出的那样,你错过了时间,最好是时间戳,除非日期用于生日等事情