0

我在表中有一个列,我想在行更改或第一次插入时自动更新它。我已将其设置为使用该UNIX_TIMESTAMP函数,因为当我想获取至少一周前的所有行或者是否有更简单/更好的方法时,我发现这是最简单的。

我可以使用datetimeortimestamp类型,但我不确定如何检索 7 天或更早的行。

我知道我只是将DEFAULT设置设置为相应的功能,例如UNIX_TIMESTAMP自动更新!?

4

1 回答 1

2

最简单的方法是让你的专栏像这样:

CREATE TABLE foo(
whatever_id int auto_increment,
myTS timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(whatever_id)
);

这样,每当您在行中出现任何内容时,myTS 都会自动更新为当前日期。CURRENT_TIMESTAMP 的默认值是可选的。唯一的缺点是 MySQL 只允许表中的一列拥有DEFAULTON UPDATE拥有CURRENT_TIMESTAMP. 但是有一些变通方法,而且现在已经走得太远了。询问您是否需要知道。

然后,当您想要 7 天或更早的行时,您可以

SELECT
*
FROM foo
WHERE
DATEDIFF(CURDATE(), myTS) >= 7
/*or
DATEDIFF(CURDATE(), myTS) >= DATE_SUB(NOW(), INTERVAL 1 WEEK)
*/

在此处阅读有关DATEDIFF功能的更多信息。

或者另一种方式是

SELECT
*
FROM foo
WHERE
DATE_ADD(myTS, INTERVAL 1 WEEK) <= CURDATE()

DATE_ADD您可以在与上述相同的链接下阅读有关功能的更多信息。

当然,也可以简单地手动选择日期:

SELECT
*
FROM foo
WHERE
myTS < '2012-07-02'

But note, that a timestamp column consists of date and time value. So when you write something like query above it's implicitly '2012-07-02 00:00:00'. So if you want to have something like <= 2012-07-02 (the whole day) you have to write <= '2012-07-02 23:59:59'. Wanted to add that, just in case this leads to confusion.

于 2012-07-09T13:20:10.257 回答