Pytanie MySQL otrzymuje datę n dni temu jako znacznik czasu


W MySQL, skąd miałbym otrzymać znacznik czasu, powiedzmy 30 dni temu?

Coś jak:

select now() - 30

Wynik powinien zwrócić znacznik czasu.


76
2017-07-08 02:16


pochodzenie


Myślę, że szukasz DATE_SUB. - joeslice
Jaki format znacznika czasu? Istnieje format, w którym ludzie, którzy pracują z funkcjami MySQL DATE, są zaznajomieni i istnieje znacznik czasu w stylu UNIX. - joebert
Jestem po znaczniku czasu MySQL. - Ben Noland


Odpowiedzi:


DATE_SUB zrobi część tego w zależności od tego, co chcesz

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

145
2017-07-08 03:59



Czym różni się pierwsze i drugie zapytanie? - Codler
pojawia się (v1) DATE_SUB zwróci DATETIME lub STRING w zależności od danych wejściowych. TIMESTAMP (v2) wymusza na TIMESTAMP. dev.mysql.com/doc/refman/5.1/en/... - jsh


Możesz użyć:

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

W przypadku znaczników czasowych unix lub:

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

Dla standardowego formatu daty MySQL.


3
2017-07-08 02:27





Jeśli potrzebujesz ujemnych godzin ze znacznika czasu

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

to

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

zwróci wartości ujemne i dodatnie, jeśli musisz użyć x> this_timestamp

ale to

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

zwróci tylko dodatnie, godziny


0
2018-06-19 19:48