2009-07-08 4 views
70

В MySQL, как мне получить временную метку, скажем, 30 дней назад?MySQL получает дату n дней назад как временную метку

Что-то вроде:

select now() - 30 

Результат должен возвратить метку времени.

+1

Какой формат метки времени? Есть формат, с которым знакомы люди, которые работают с функциями MySQL DATE, и есть временная метка стиля UNIX. – joebert

+0

Я после Timestamp MySQL. –

ответ

138

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 
+10

В чем отличие первого и второго запросов? – Codler

+1

Я также хотел бы ответить на вышеупомянутый вопрос. Спасибо. – transilvlad

+4

появляется (v1) DATE_SUB возвращает DATETIME или STRING в зависимости от входов. TIMESTAMP (v2) заставляет его использовать тип TIMESTAMP. http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add – 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))) 

будет возвращать только положительные, часы

Смежные вопросы