Oblicz różnicę między dwoma datami w MySQL

157

Przechowuję czas ostatniego logowania w MySQL w polu datetimetypu -type. Kiedy użytkownicy się logują, chcę zobaczyć różnicę między czasem ostatniego logowania a aktualnym czasem (z którego korzystam NOW()).

Jak mogę to obliczyć?

Devesh Agrawal
źródło

Odpowiedzi:

296

UŻYJ TIMESTAMPDIFFfunkcji MySQL. Na przykład możesz użyć:

SELECT TIMESTAMPDIFF(SECOND, '2012-06-06 13:13:55', '2012-06-06 15:20:18')

W twoim przypadku trzecim parametrem TIMSTAMPDIFFfunkcji byłby aktualny czas logowania ( NOW()). Drugim parametrem byłby czas ostatniego logowania, który jest już w bazie danych.

FSP
źródło
To znaczy zaktualizować ostatnie logowanie? to, czego chcę, to jak w stackoverflow Twoje pytanie zostało wysłane 2s temu, 30s temu, 2 minuty temu ... itd. Chcę podobnego rodzaju funkcjonalności. Na przykład jest jedna tabela z napisem REQUESTS (identyfikator, komunikat, znacznik czasu). sygnatura czasowa podczas przechowywania będzie TERAZ (). gdy uruchamiam zapytanie, wybieram * z żądań, zamiast wyświetlać tę wartość, powinien wyświetlać identyfikator, komunikat i ile czasu zostało wysłane.
Devesh Agrawal
1
Podczas wykonywania zapytania SELECT TIMESTAMPDIFF (SECOND, NOW (), 'select lastLoginTime z żądań, gdzie id =' 2 '') .. Zwraca NULL. Każdy pomysł, dlaczego?
Devesh Agrawal
jakie jest wyjście select lastLoginTime z żądań, gdzie id = '2'?
FSP
SELECT TIMESTAMPDIFF (SECOND, NOW (), '2012-06-06 08:07:36'); Spróbuj tego!
FSP
TAK, że działa, ale muszę pobrać drugi parametr z tabeli. Jak to osiągnąć. W rzeczywistości chcę uniknąć zagnieżdżonych zapytań. Dowolny pomysł?
Devesh Agrawal
3

moje dwa grosze z logiki:

składnia to „stara data” -: „nowa data”, więc:

SELECT TIMESTAMPDIFF(SECOND, '2018-11-15 15:00:00', '2018-11-15 15:00:30')

daje 30,

SELECT TIMESTAMPDIFF(SECOND, '2018-11-15 15:00:55', '2018-11-15 15:00:15')

daje: -40

ingconti
źródło
2

Jeśli data rozpoczęcia i zakończenia przypadają w różne dni, użyj funkcji TIMEDIFF.

SELECT TIMEDIFF(datetime1,datetime2)

jeśli datetime1> datetime2 to

SELECT TIMEDIFF("2019-02-20 23:46:00","2019-02-19 23:45:00")

daje: 24:01:00

i datetime1 <datetime2

SELECT TIMEDIFF("2019-02-19 23:45:00","2019-02-20 23:46:00")

daje: -24: 01: 00

Adi
źródło
Uwaga, radzi sobie tylko z datami oddalonymi od siebie o 839 godzin
Caius Jard