Ich habe ein Zeitfeld Zeitstempel in meiner MySQL-Datenbank, das einem DATE
Datentyp in meiner Bean zugeordnet ist. Jetzt möchte ich eine Abfrage, mit der ich alle Datensätze in der Datenbank abrufen kann, für die der Unterschied zwischen dem aktuellen und dem in der Datenbank gespeicherten Zeitstempel> 20 Minuten beträgt.
Wie kann ich es tun?
Was ich will ist:
SELECT * FROM MyTab T WHERE T.runTime - now > 20 minutes
Gibt es dafür MySQL-Funktionen oder eine Möglichkeit, dies in SQL zu tun?
Antworten:
Ich denke, Sie könnten TIMESTAMPDIFF (unit, datetime_expr1, datetime_expr2) so etwas wie verwenden
select * from MyTab T where TIMESTAMPDIFF(MINUTE,T.runTime,NOW()) > 20
quelle
quelle
Ich verwende den folgenden Code für heute und das Datenbankdatum.
TIMESTAMPDIFF(MINUTE,T.runTime,NOW()) > 20
Gemäß der Dokumentation kann das erste Argument eines der folgenden sein:
quelle
Probier diese:
select * from MyTab T where date_add(T.runTime, INTERVAL 20 MINUTE) < NOW()
HINWEIS: Dies sollte funktionieren, wenn Sie das MySQL DateTime-Format verwenden. Wenn Sie den Unix-Zeitstempel (Ganzzahl) verwenden, ist dies noch einfacher:
select * from MyTab T where UNIX_TIMESTAMP() - T.runTime > 20*60
Die Funktion UNIX_TIMESTAMP () gibt den aktuellen Unix-Zeitstempel zurück.
quelle
T.runTime < DATE_SUB(NOW(), INTERVAL 20 MINUTES)
.t.col
, dannt.col < func(const)
sollte noch schneller sein , als ,invfunc(t.col) < const
weil die DB die rechte Seite vorberechnet und den Index verwenden.MINUTES
, funktioniert aber, wenn ich es verwendeMINUTE
. Gemäß den MySQL-DokumentenMINUTE
wird vonDATE_ADD
undDATE_SUB
in Version 5.5 erwartet . FunktioniertMINUTES
in anderen Versionen?INTERVAL 20 MINUTE
. Ich kann meinen Kommentar nicht mehr bearbeiten, um ihn zu beheben, aber ich kann (und habe es gerade getan) die Antwort bearbeiten.