SQL: get DATEDIFF, um nicht wieder negative Werte
Ich habe eine Abfrage, in der ich bin, ziehen die Laufzeit eines Programms. Die Datenbank enthält seine Startzeit und sein Ende die Zeit. Ich möchte die gesamte Zeit für die Ausführung.
Bisher habe ich:
SELECT startTime, endTime,
cast(datediff(hh,starttime,endtime) as varchar)
+':'
+cast(datediff(mi,starttime,endtime)-60*datediff(hh,starttime,endtime) as varchar) AS RUNTIME
FROM applog
WHERE runID = 33871
ORDER BY startTime DESC
Wenn ich diese ausführen bekomme ich die erwarteten Werte und auch einige unerwartete.
Zum Beispiel, wenn starttime = 2008-11-02 15:59:59.790 und endtime = 2008-11-02 19:05:41.857 dann ist die Laufzeit = 4:-54.
Wie bekomme ich eine quere in MS SQL-SMS, um den Rückgabewert 3:06 für diesen Fall?
Dank.
Eoin Campbell wählte ich als die Antwort ist die bulletproof für meine Bedürfnisse. David B ' s do-Lage als gut.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen diese
Davon 2 erklärte Daten.
Diese zurück, Stunden /Minuten /Sekunden
Dies ist die zero-padded verkettete Zeichenfolge version
Hier einen Weg, es zu tun:
Müssen Sie im Einklang mit Ihren anrufen zu datediff(). Sie alle sollten den gleichen datepart-argument.
Sehen MSDN ist die DATEDIFF (Transact-SQL) Artikel.
In deinem Beispiel bist du mit beiden "mi" und "hh" und verketten.
Wählen Sie den kleinsten gemeinsamen Nenner für Ihre Dauer (wohl ss oder s), und führen Sie eine mathematische Grundlage, die (wie die anderen Antworten sind illustriert, aber nicht wirklich beschreiben).
Getrennte Berechnung und Darstellung der Logik:
Wenn Sie brauchen, um machen Sie mehr als 24 Stunden, verwenden Sie eine andere Vorstellung von Logik. Das ist genau das, was ich denken konnte, am schnellsten.