MySQL получает дату n дней назад в качестве отметки времени


99

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

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

select now() - 30

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


Я думаю, вы после DATE_SUB .
joeslice 08

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

Я после метки времени MySQL.
Бен Ноланд

Ответы:


181

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
Чем отличается первый и второй запрос?
Codler

5
похоже (v1) DATE_SUB вернет DATETIME или STRING в зависимости от входных данных. TIMESTAMP (v2) заставляет его использовать тип TIMESTAMP. dev.mysql.com/doc/refman/5.1/en/…
jsh 02

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 ) ) )

вернет только положительные часы

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.