2011-06-08 215 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天。