Różnica w minutach z dwóch tymczasowych pól w MySQL


Skonfigurowałem moją bazę danych MySQL z polem „czas”
To nie jest HH: MM w tradycyjnym sensie, jest to czas, w którym wydarzyło się wydarzenie, więc zdarzenie 5:45 miało miejsce za 5 minut i 45 sekund do końca gry. 12:25 miało miejsce na 12 minut i 25 sekund i tak dalej.
Chciałbym móc poznać całkowity czas, który upłynął, więc jeśli mam zdarzenie, które wydarzyło się o 12:25, a następne zdarzenie miało miejsce o 5:45, chcę być w stanie uzyskać różnicę, która wyniosłaby 6 : 40. Następnie chciałbym to wyrazić jako liczbę dziesiętną, w tym przypadku 6,67.
Czy to możliwe?
Z góry dziękuję.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Po prostu użyj
TIMEDIFF(fromtime, totime):SELECT TIMEDIFF("12:25", "5:45");

Jeśli potrzebujesz ułamka dziesiętnego, użyj
TIME_TO_SEC ()/3600
(zakładając, że przekazałeś go do sekund, ale format, w którym przechowujesz czas, jest niejasny i SQL prawdopodobnie zinterpretuje je jako HH: MM - być może Ty możesz to naprawić za pomocą
CONCAT ("00:", MinuteSecondField)
?) - wtedy możesz użyć
TIME_TO_SEC ()/60
, co jest bardziej poprawne)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

U mnie zadziałało:
TIMESTAMPDIFF(MINUTE, T0.created, T0.modified)

Połączyć:

https://dev.mysql.com/doc/refm ... pdiff
https://dev.mysql.com/doc/refm ... pdiff
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Potrzebowałem czegoś podobnego. Dwie przydatne funkcje:

TIME_TO_SEC
http://dev.mysql.com/doc/refma ... o-sec
i

SUBTIME
http://dev.mysql.com/doc/refma ... btime
.
na przykład jeśli twoje przedziały czasowe były normalne razy GG: MM, to
SELECT (TIME_TO_SEC(end_time) - TIME_TO_SEC(start_time))/60 AS `minutes`

W Twoim przypadku, jak rozumiem, czasy idą w przeciwnym kierunku, tj.
12: 00 & < 6: 00
, więc czas end_time i start_time muszą zostać zastąpione.
Jeśli chcesz uzyskać wynik w formacie HH: MM: SS, możesz to zrobić
SELECT SUBTIME(end_time, start_time)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Użyłem UNIX_TIMESTAMP (event1) -UNIX_TIMESTAMP (event2), który daje sekundy między zdarzeniami. Podziel go przez 60,0, a otrzymasz ułamek dziesiętny zgodnie ze swoimi wymaganiami. To rozwiązanie zakłada, że ​​kolumny są wartościami zgodnymi z datami. To zadziała naprawdę szybko, jeśli są to TIMESTAMPY.
AKTUALIZACJA: To rozwiązanie działa tylko na typach datowników, a nie na typach czasu, jak w pierwotnym pytaniu.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się