2017-01-01 7 views
1

Hallo Ich habe eine Postgresql-Abfrage wie unten, um DateTime Unterschied für {1} und {2} in Minuten zu berechnen.postgresql Abfrage für Stunden Minuten und Sekunden

3 Stunden 31 Minuten 42 Sekunden

Welche Manipulation kann ich wie oben für die Anzeige benötigen:

CAST(ROUND(EXTRACT(EPOCH from (({2}::timestamp) - ({1}::timestamp)))/60) AS INT) 

ich den Unterschied in Stunden, Minuten und Sekunden berechnet werden soll wie angezeigt? Hier

+0

Sind Zeitdifferenzen von> = 24 Stunden möglich? Bitte geben Sie auch die genauen Datentypen der Quellspalten und Ihre Version von Postgres an. Die Frage ist ohne sie mehrdeutig. –

Antwort

1
SELECT to_char((col1 - col0), 'HH24 hrs MI "minutes" SS "seconds"') FROM T1; 

ist ein sqlfiddle: link

Die to_char Funktion nimmt ein Intervall (ein Intervall ist die Zeitspanne zwischen zwei Zeitstempel und Zeitstempel subtrahieren gibt Ihnen ein Intervall). Es braucht dann eine Formatierung, und Sie können so ziemlich alles anwenden, was Sie wollen.

Formatting functions in PostgreSQL

+1

Subtrahieren von * Daten * gibt Ihnen einen "ìnteger" (die Anzahl der Tage dazwischen). Das Subtrahieren * von Zeitstempeln * erzeugt ein "Intervall", das niemals "Datumsintervall" genannt wird. –

1

Die Subtraktion von zwei oder timestamptimestamptz Werte erzeugt ein interval. (Während Subtraktion zweier date Werte erzeugt ein integer!)
Details about date/time types in the manual.

Der Standardtextdarstellung eines interval ausreichend sein:

SELECT timestamp '2017-1-6 12:34:56' - timestamp '2017-1-1 0:0'; 

Ergebnis ist ein interval, wie folgt angezeigt:

5 days 12:34:56 

Wenn Sie genau das Format in der Frage benötigen, müssen Sie angeben, wie mit Intervallen> = 24 ho verfahren werden soll urs. Hinzufügen 'Tage'? Oder erhöhen Sie einfach die Stunden entsprechend?

@Nobody provided wie zu verwenden to_char(). Aber fügen Tagen eine oder andere Weise:

SELECT to_char(ts_col2 - ts_col1, 'DD" days "HH24" hours "MI" minutes "SS" seconds"'); 

Ergebnis:

05 days 12 hours 34 minutes 56 seconds 

'Tage' deckt den Rest. Im Ergebnis sind standardmäßig keine größeren Zeiteinheiten enthalten.

Verwandte Themen