MySQL选择最近几天?

90

我正在使用MYSQL玩耍,我知道有一个限制命令可以显示一定数量的结果,但我想知道MySQL是否能够仅显示最近3天的结果或其他内容。 只是好奇。

更新: 我使用NOW()存储时间。


1
@Doug,请给我们更多的信息。您如何记录计算时间DATETIMEs,DATEs,TIMESTAMPs,epoch timestamps等?您想要从现在开始的最后三天(CURRENT_DATE() - INTERVAL 3 DAYS)还是从最近的记录开始?等等。 - pilcrow
5个回答

193

使用三天前的日期:

WHERE t.date >= DATE_ADD(CURDATE(), INTERVAL -3 DAY);

请查看DATE_ADD文档。

或者您可以使用以下方法:

WHERE t.date >= ( CURDATE() - INTERVAL 3 DAY )

6
"WHERE t.date >= ( CURDATE() - INTERVAL 3 DAY )" 应该足够了。Translated: "WHERE t.date >= ( CURDATE() - INTERVAL 3 DAY )" should be sufficient. - Salman A
1
我是通过phpmyadmin运行它的,如果这有所不同。 - Strawberry
1
我认为 BETWEEN (CURDATE() - INTERVAL 1 WEEK) AND CURDATE() 也很好。它内部有什么不同吗? - caesarsol
DATE_ADD(CURDATE(), INTERVAL -3 DAY) 更快 - Mike
应该是 WHERE t.date >= DATE_ADD(CURDATE(), INTERVAL -3 DAY);(带逗号)以通过语法检查。 - SoulRayder
显示剩余2条评论

16
您可以在MySQL的WHERE子句中使用以下语句来返回最近7天/一周内创建的记录:
``` created >= DATE_SUB(CURDATE(),INTERVAL 7 day) ```
同时,在减法运算中使用 NOW() 函数可以精确到时分秒。所以,如果您想返回在过去 24 小时内(精确到秒)创建的记录,可以使用以下语句:
``` created >= DATE_SUB(NOW(),INTERVAL 1 day) ```

2
你可以使用UNIX_TIMESTAMP()函数的组合来实现这一点。
SELECT ... FROM ... WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(thefield) < 259200

1
@Turnor,注意,一天并不总是由86,400秒组成,因为有闰秒和夏令时的存在。 - pilcrow
True。但是你很少需要那种精度水平,而且原始问题似乎也没有这样的要求。 - Turnor
@pilcrow 谨记这一点,那么你会如何处理这个问题呢? - Jeremy Visser
1
@JeremyVisser,我会减去INTERVAL 3 DAY,就像另一个答案中所述。 - pilcrow

-2
SELECT DATEDIFF(NOW(),pickup_date) AS noofday 
FROM cir_order 
WHERE DATEDIFF(NOW(),pickup_date)>2;

或者

SELECT * 
FROM cir_order 
WHERE cir_order.`cir_date` >= DATE_ADD( CURDATE(), INTERVAL -10 DAY )

-3

WHERE t.date >= DATE_ADD(CURDATE(), INTERVAL '-3' DAY);

在-3值上使用引号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接