2012-07-31 20 views
0

我有一个查询:MySQL之间没有抓住结束日期?

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

它返回0的结果,尽管有日期2012-07-30 1000+条目。 我发现了BETWEEN根本抢不结束日期,所以如果它是

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

...它应该跟我抢条目28,29而不是30

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

+0

为什么不简单使用WHERE date_created ='2012-07-30' – 2012-07-31 23:26:34

+0

这听起来很愚蠢,但是不能在“结束”日期添加一天吗?像BETWEEN'2012-07-28'和'2012-07-31' – Tivie 2012-07-31 23:27:21

回答

2

告诉它的日子,而不是开始的结束。

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

完美答案,所以这就是原因! – Karem 2012-07-31 23:33:31

0

增加一天的结束日期在您的查询:

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

你为什么不干脆用

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

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,以及(除尚未现有毫大部分地区第二个支持,thanx @Ignacio进行更正)。

+0

总的来说很好,但[与MySQL的相关性稍差](http://dev.mysql.com/doc/refman/5.1/en/fractional-seconds.html)。 – 2012-07-31 23:48:43

+0

@Ignacio:是的,你是对的。但是,当[毫秒支持将被添加]时,不会破坏代码(http://kb.askmonty.org/en/microseconds-in-mariadb/)。 – 2012-07-31 23:56:14

0

只需添加更多的信息 做的正是这一点(分钟< = EXPR和EXPR < =最大值)之间,得到了它从here

为别人指出的那样,你错过了时间,其最好是一个时间戳除非日期用于诸如出生日期之类的东西

相关问题