2016-06-10 12 views
-1

Ich habe 2 Spalten in MySQL db mit Datentyp wie TIMESTAMP. Für jede Zeile möchte ich die Differenz zwischen diesen 2 Zeitstempeln in hh:mm:ss (hh könnte 24 oder könnte auch 3 Ziffern sein) in eine andere Spalte speichern.Get Unterschied zwischen TIMESTAMPs in MySQL und aktualisieren Sie eine andere Spalte

Was soll ich dafür verwenden?

Ich habe das versucht, aber es funktioniert nicht.

update ABC_TABLE set colC=TIMEDIFF(colA, colB); 

colC ist der Typ TIME

|Field     | Type   | Null | Key | Default | Extra 
+------------------------+--------------+------+-----+---------+-------+ 
| colC     | time   | YES |  | NULL | 
+0

Fügen Sie Ihre Tabelle Datensätze zu der Frage zusammen mit dem Ergebnis Ihrer 'update' Abfrageergebnisse. –

+0

auch post 'show create table abc_table' Ergebnisse. –

+0

@RavinderReddy Die Frage ist völlig in Ordnung ohne diese Informationen. – fancyPants

Antwort

0

Die Stunde einen Teil der Zeit-Datentyp kann nicht Werte halten größer als 23. Sie werden char oder varchar verwenden.

Berechnen Sie die Differenz zwischen den beiden Zeitstempel in Sekunden, wie folgt aus:

SELECT TIMESTAMPDIFF(SECOND, '2016-06-10 11:00:00', '2016-06-10 12:00:00'); 

Dann können Sie diese Funktion verwenden, um die Sekunden in das Format days:hours:minutes:seconds

DROP FUNCTION IF EXISTS f_s2dhms; 
DELIMITER $$ 
CREATE FUNCTION f_s2dhms(v_seconds INT) 
RETURNS VARCHAR(15) 
DETERMINISTIC 
COMMENT 'converts seconds in days:hours:minutes:seconds' 
BEGIN 
DECLARE v_dhms VARCHAR(15); 
DECLARE v_days INT; 
DECLARE v_hours INT; 
DECLARE v_minutes INT; 

SET v_hours = v_seconds/3600; 
SET v_minutes = (v_seconds % 3600)/60; 
SET v_seconds = (v_seconds % 3600) % 60; 

IF (v_hours > 23) THEN 
    SET v_days = v_hours/24; 
    SET v_hours = v_hours % 24; 
ELSE 
    SET v_days = 0; 
END IF; 

RETURN CONCAT(v_days, ':', RIGHT(CONCAT('0', v_hours), 2), ':', RIGHT(CONCAT('0', v_minutes), 2), ':', RIGHT(CONCAT('0', v_seconds), 2)); 

END $$ 
DELIMITER ; 

Verwenden Sie es wie

konvertieren
SELECT f_s2dhms(TIMESTAMPDIFF(SECOND, '2016-06-10 11:00:00', '2016-06-10 12:00:00')); 
  • here Sie können mehr über timestampdiff()
  • lesen