0

我将所有日期作为时间戳(int)存储在数据库中。

我怎样才能得到恰好提前 3 天的日期?

我试过

SELECT date from user WHERE  DATE_ADD(DATE( FROM_UNIXTIME( `created` ) ), INTERVAL 3 DAY) = CURDATE()

这是最好/最有效的方法吗?

4

2 回答 2

1

我认为数据库更喜欢只将日期添加 2 次来定义范围,例如:

SELECT date FROM user
WHERE UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL -3 DAY)) <= `created`
AND `created` < UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL -2 DAY));

测试在这两种情况下都将 DESCRIBE 关键字放在 SELECT 之前,并且数据库会响应它将如何执行查询

于 2012-06-27T18:58:18.010 回答
0
SELECT date
FROM user
WHERE created = UNIX_TIMESTAMP(CURRENT_DATE - INTERVAL 3 DAY)

注意:createdwhere 子句中的列上没有使用函数。这个查询应该可以使用索引。

于 2012-06-27T19:05:25.563 回答