MySQL pobiera datę n dni temu jako znacznik czasu

99

W MySQL, w jaki sposób mógłbym uzyskać sygnaturę czasową sprzed, powiedzmy, 30 dni?

Coś jak:

select now() - 30

Wynik powinien zwrócić znacznik czasu.

Ben Noland
źródło
Myślę, że jesteś po DATE_SUB .
joeslice
1
Jaki format sygnatury czasowej? Jest format, który znają osoby pracujące z funkcjami MySQL DATE, i istnieje znacznik czasu w stylu UNIX.
joebert
Szukam sygnatury czasowej MySQL.
Ben Noland

Odpowiedzi:

181

DATE_SUB wykona część tego w zależności od tego, czego 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
Justin Giboney
źródło
11
Czym się różni od pierwszego i drugiego zapytania?
Codler
5
wygląda na to, że (v1) DATE_SUB zwróci DATETIME lub STRING w zależności od danych wejściowych. TIMESTAMP (v2) wymusza na nim typ TIMESTAMP. dev.mysql.com/doc/refman/5.1/en/…
jsh
3

Możesz użyć:

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

Dla znaczników czasu unix lub:

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

Standardowy format daty MySQL.


źródło
0

Jeśli potrzebujesz ujemnych godzin od 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

Petre Sosa
źródło