2012-03-27 5 views
6

Ich habe eine Mysql-Tabelle, die Daten im Format speichert (JJJJ-MM-TT HH: MM: SS).Mysql SEC_TO_TIME ohne nachlaufende Sekunden - Lösung gefunden

Was ich will, ist die HH Summe: MM: SS Teils für die ausgewählten Zeilen, so wie ich in einem anderen Beitrag gefunden verwende ich die Abfrage

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(date))) FROM table 

Diese Abfrage funktioniert. Es summiert den Teil, den ich will und gibt es im Format HH: MM: SS zurück.

Meine Frage ist, ob es möglich ist, die Sekunden aus dem Ergebnis zu entfernen.

Ich muss dies in der Abfrage tun, da das CMS, das ich verwende, erlaubt mir nicht, PHP auf diesem Teil zu verwenden.

Übrigens wäre es erstaunlich, wenn ich das Ergebnis in Tagen, Stunden und Minuten zurückgeben könnte, falls die Summe 24 Stunden übersteigt.

Vielen Dank im Voraus

Für interessierte jedermann fand ich die Lösung

SELECT TIME_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(hours))),'%H:%i') FROM table 
+0

Können Sie einige Beispiele für Ein-/Ausgänge geben? –

+0

In der Tabelle habe ich zwei Zeilen mit Daten '2012-03-27 01:05:00' und '2012-03-27 17:00:00'. Die obige Abfrage gibt '18: 05: 00 'zurück, was korrekt ist, aber was ich will, ist '18: 05' – tliokos

Antwort

1

Diese Abfrage wird es Tage, Stunden und Minuten berechnen -

SELECT 
    SUM(TIME_TO_SEC(date) DIV 86400) days, 
    SUM(EXTRACT(HOUR FROM (SEC_TO_TIME(TIME_TO_SEC(date) % 86400)))) hours, 
    SUM(EXTRACT(MINUTE FROM (SEC_TO_TIME(TIME_TO_SEC(date) % 86400)))) minutes 
FROM table 

Dann CONCAT verwenden Funktion, um dieses Ergebnis in eine Zeichenfolge zu formatieren.

+0

Danke, aber leider funktioniert es nicht. Immer noch dasselbe Ergebnis – tliokos

+0

Ich habe die Antwort geändert. – Devart

+0

Vielen Dank. Es funktioniert, obwohl ich mich bemühe, CONCAT zum Laufen zu bringen. – tliokos

-1
SELECT SUBSTR(SEC_TO_TIME(1001),2,7); 

ausgeben wird

0:16:41 
+0

Nicht gut. Dies löscht die erste Stelle der Stunde und lässt die Sekunden übrig. – trincot

+0

'SEC_TO_TIME (24 * 3600 * 10) = 240: 00: 00 'würde zu' 40: 00: 0' wechseln –

2

Eine effiziente Lösung ist es, die letzten 3 Zeichen zu schneiden:

SELECT SUBSTRING(SEC_TO_TIME(seconds), 1, 5); 
Verwandte Themen