MySQL erhält das Datum vor n Tagen als Zeitstempel


97

Wie würde ich in MySQL einen Zeitstempel erhalten, beispielsweise vor 30 Tagen?

Etwas wie:

select now() - 30

Das Ergebnis sollte einen Zeitstempel zurückgeben.


Ich denke du bist hinter DATE_SUB her .
joeslice

1
Welches Format des Zeitstempels? Es gibt das Format, mit dem Benutzer von MySQL DATE-Funktionen vertraut sind, und es gibt einen Zeitstempel im UNIX-Stil.
Joebert

Ich bin hinter dem MySQL-Zeitstempel her.
Ben Noland

Antworten:


179

DATE_SUB macht einen Teil davon, je nachdem, was Sie wollen

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
Was ist der Unterschied bei der ersten und zweiten Abfrage?
Codler

5
es scheint (v1) DATE_SUB gibt abhängig von den Eingaben eine DATETIME oder STRING zurück. TIMESTAMP (v2) erzwingt einen TIMESTAMP-Typ. dev.mysql.com/doc/refman/5.1/en/…
jsh

3

Du könntest benutzen:

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

Für Unix-Zeitstempel oder:

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

Für das Standard-MySQL-Datumsformat.


0

Wenn Sie negative Stunden ab Zeitstempel benötigen

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

Dies

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

gibt negative und positive Werte zurück, wenn Sie x> this_timestamp verwenden müssen

aber dieses

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

wird nur positive Stunden zurückgeben

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.