2011-06-08 95 views
2

我需要查找为当天创建的帐户,以及过去7天的帐户。怎么办:“今天到今天-7”?

要找到我的结果在今天,它的工作原理,而我这样做:

SELECT * FROM `account` where DATE(created_at) = DATE(NOW()) 

但我不知道怎么做才能获得最后7天帐户。

我想这样的事情,但没有成功:

SELECT * FROM `account` where DATE(created_at) BETWEEN DATE(NOW()) AND DATE(NOW()-7) 

你有一个想法?

SELECT * FROM `account` 
WHERE DATE(created_at) > (NOW() - INTERVAL 7 DAY) 
+2

参考:[mySQL时间和日期函数](http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html) – 2011-06-08 09:29:07

回答

14
在MySQL

ADDDATE(DATE(NOW()), -7) 
+0

完美!谢谢 – bahamut100 2011-06-08 09:40:15

+2

-1这是_not_“今天和7天前之间”。这是“7天以前”,可能包括未来的日期。 – 2011-06-08 10:20:15

+2

如果您在某个列中包含未来日期时应该包含某个创建日期的日期,那么不同的东西无论如何都是非常错误的。但你是对的,最好是安全而不是抱歉。 – Gryphius 2011-06-08 11:17:50

19

尝试::

BETWEEN (NOW() - INTERVAL 7 DAY) AND NOW() 
+0

感谢这个答案,有用:) – bahamut100 2011-06-08 09:44:41

+0

@ bahamut100:我推荐这个答案在接受之一。他们有微妙的不同。 – 2011-06-08 11:17:23

+1

+1。此外,随着行数的增长,这个函数没有巨大的性能损失(与在'where'中使用的列上的函数接受的答案相比)... – 2011-07-13 12:30:45

0

也看看MySQL函数ADDDATE(),DATE_ADD(),DATE_SUB()

例如

3

如果created_at有一个索引,你不会想要阻止优化器使用它,我建议如下模式(假设created_at包含日期和时间):

WHERE created_at >= CURRENT_DATE - INTERVAL 7 DAY 
    AND created_at < CURRENT_DATE + INTERVAL 1 DAY 

这跨越从一周前到今天(含)的那一天的范围,因此总共8天。