从特定时期抓取行时使用的最简单的时间戳类型?

时间:2012-07-09 10:20:17

标签: mysql datetime unix-timestamp

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

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

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

1 个答案:

答案 0 :(得分: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函数here

或者另一种方式是

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

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

当然也可以手工选择日期:

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

但请注意,timestamp列包含日期时间值。所以当你在上面写一些类似查询的内容时,它会隐式'2012-07-02 00:00:00'。因此,如果你想要<= 2012-07-02 (the whole day)这样的东西,你必须写<= '2012-07-02 23:59:59'。希望补充一点,以防这会导致混乱。