2016-03-25 16 views
0

Ich versuche, Abfahrtszeit von Ankunftszeit zu subtrahieren, um die Dauer der Reisen zu erhalten.Subtrahieren zweimal, um die Dauer zu erhalten

Die Ankunft/Abfahrt ist im Format HH: MM.

Ich benutze postgresql, die Zeitspalten sagen einfach 'string' für wie sie definiert sind. Ein Freund hat mir geholfen, sie als ganze Zahlen zu werfen, aber ich bin bleiben immer noch an dieser Stelle:

SELECT x, cast (table1.arrival as integer) - cast (table.1departure as integer), sum(y), count(*) 
FROM table1 INNER JOIN table2 
ON ..... 
GROUP BY ..... 
ORDER BY.... 

Ein Freund sagte mir, dies aber ich bin mir nicht ganz sicher, was er bedeutet: „Nein, Sie brauchen eine erstellen neue Variable für nur Minuten 1:30 = 90 Minuten. Wirf das als Integer und berechne dann. " Wie mache ich das?

+0

[Diese SO-Antwort] (http://stackoverflow.com/a/1800378/1678362) kann leicht geändert werden, um auf Ihre Frage zutreffen. – Aaron

+0

Wie sind diese Spalten definiert? Als 'Varchar's? – Mureinik

+0

Ist Ihr RDBMS Mysql? –

Antwort

0

Wenn die Spalte in der Tat eine varchar (oder text) ist, dann müssen Sie zuerst die Spalte zu einem geeigneten Zeitpunkt zu werfen.

SELECT x, table1.arrival::time - table.1departure::time, sum(y), count(*) 
FROM table1 INNER JOIN table2 
ON ..... 
GROUP BY ..... 
ORDER BY. 

Die oben fehl, wenn die in den Spalten gespeicherten Zeit nicht korrekt formatiert Zeit im 24-Stunden-Format (z.B. 22.40)

Das Ergebnis ist ein time - timeinterval. Wenn Sie das Ergebnis in wenigen Minuten erhalten möchten, müssen Sie sie aus dem Intervall extrahieren:

extract(epoch from table1.arrival::time - table.1departure::time)/60 

extract(epoch ..) die Sekunden im Intervall zurückgibt, das ist, warum Sie es um 60 teilen müssen Minuten zu bekommen.

Dies wird jedoch nicht richtig, wenn die An- und Abreisezeit nicht am selben Tag (zB Abfahrt um 23:25 Uhr und Ankunft ist am nächsten Tag um 07:23)


Unrelated aber : Sie sollten niemals Daten, Zeiten oder Zeitstempel in varchar oder text Spalten speichern. Immer Verwenden Sie den richtigen Datentyp.

+0

Alter ... vielen Dank. Arbeitete perfekt. Ja, diese Tische wurden nicht von mir erstellt, daher kann ich nicht erklären, warum sie nicht richtig gelagert wurden. – am340

0

Wenn Ihre RDBMS Mysql ist, können Sie die MySQL DATEDIFF() Funktion

Zum Beispiel verwenden:

SELECT DATEDIFF(arrivale,departure) AS DiffDate 

Ich gehe davon aus, dass hier die arrivale und die Abreise am selben Tag ist. Und diese arrivale und departure sind TimeDate formatiert wie HH: MM.

Verwandte Themen