MySQL获取n天前的日期作为时间戳


97

在MySQL中,如何从30天前获得时间戳?

就像是:

select now() - 30

结果应该返回一个时间戳。


我认为您在DATE_SUB之后。
joeslice

1
时间戳的格式是什么?有一些使用MySQL DATE函数的人熟悉的格式,并且有UNIX风格的时间戳。
joebert

我在使用MySQL时间戳。
本·诺兰德

Answers:


179

DATE_SUB将根据您的需要执行部分操作

mysql> SELECT DATE_SUB(NOW(), INTERVAL 30 day);
2009-06-07 21:55:09

mysql> SELECT TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 day));
2009-06-07 21:55:09

mysql> SELECT UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 day));
1244433347

11
第一个查询和第二个查询有什么不同?
科德勒2012年

5
似乎(v1)DATE_SUB将根据输入返回DATETIME或STRING。TIMESTAMP(v2)将其强制为TIMESTAMP类型。 dev.mysql.com/doc/refman/5.1/en/...
JSH

3

您可以使用:

SELECT unix_timestamp(now()) - unix_timestamp(maketime(_,_,_));

对于UNIX时间戳记或:

SELECT addtime(now(),maketime(_,_,_));

对于标准的MySQL日期格式。


0

如果您需要从时间戳记开始负数小时

mysql>SELECT now( ) , FROM_UNIXTIME( 1364814799 ) , HOUR( TIMEDIFF( now( ) , FROM_UNIXTIME( 1364814799 ) ) ) , TIMESTAMPDIFF( HOUR , now( ) , FROM_UNIXTIME( 1364814799 ) ) 
2013-06-19 22:44:15     2013-04-01 14:13:19     1904    -1904

这个

TIMESTAMPDIFF( HOUR , now( ) , FROM_UNIXTIME( 1364814799 ) ) 

如果需要使用x> this_timestamp,将返回负值和正值

但是这个

HOUR( TIMEDIFF( now() , FROM_UNIXTIME( 1364814799 ) ) )

只会返回正数小时

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.