我在表中有一个列,我想在行更改或第一次插入时自动更新它。我已将其设置为使用该UNIX_TIMESTAMP
函数,因为当我想获取至少一周前的所有行或者是否有更简单/更好的方法时,我发现这是最简单的。
我可以使用datetime
ortimestamp
类型,但我不确定如何检索 7 天或更早的行。
我知道我只是将DEFAULT
设置设置为相应的功能,例如UNIX_TIMESTAMP
自动更新!?
我在表中有一个列,我想在行更改或第一次插入时自动更新它。我已将其设置为使用该UNIX_TIMESTAMP
函数,因为当我想获取至少一周前的所有行或者是否有更简单/更好的方法时,我发现这是最简单的。
我可以使用datetime
ortimestamp
类型,但我不确定如何检索 7 天或更早的行。
我知道我只是将DEFAULT
设置设置为相应的功能,例如UNIX_TIMESTAMP
自动更新!?
最简单的方法是让你的专栏像这样:
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 只允许表中的一列拥有DEFAULT
或ON 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.