2016-12-29 1 views
3

Ich habe die folgende Formel auf Stack-Überlauf gefunden, die ich Werte summiert Zeit hat dazu beigetragen, die es nach Tweaking leicht brillant funktioniert:SQL Server - Summe Zeitanzeige Ausgabe

SELECT CAST(t.TotalHours/3600 AS VARCHAR(2)) + ':' 
    + CAST(t.TotalHours%3600/60 AS VARCHAR(2)) + ':00' 
FROM (SELECT SUM(DATEDIFF(S, '00:00', WorkingHours)) AS TotalHours 
     FROM workhour) t 

von SQL How to sum times from Time datatype columns in hh:mm:ss

Wie auch immer, Ich habe jetzt ein Problem in Bezug auf die Formatierung. Wenn ich diese Abfrage auf meine Daten ausführen, gibt es die Zeitsumme in diesem Format: HH:M:SS (32:0:00)

Meine Daten:

WorkingHours 
    05:30 
    06:00 
    05:30 
    08:00 
    07:00 

Erwartete Ausgabe:

TotalHours 
    32:00:00 

Wie Sie bemerken, meine Daten besteht nicht aus Sekunden, also habe ich das am Ende als String hinzugefügt. Es ist das Protokoll, das mir ein Problem zu machen scheint.

Frage: Gibt es eine Möglichkeit, die oben forumla zu zwicken, damit ich die Gesamt als HH:MM:SS -> 32:00:00 bekommen

HINWEIS anzuzeigen: Dies geschieht, wenn das Minutenfeld 0 zurückgibt, oder hat ein Wert von weniger als 10 ...

Vielen Dank für die Hilfe im Voraus. Ich verwende SQL Server 2016 Data Center und habe die Daten in meiner Tabelle als Varchar im Format HH: MM, genannt WorkingHours, gespeichert.

Arbeits Antwort:

SELECT CAST(t.TotalHours/3600 AS VARCHAR(2)) + ':' + 
    RIGHT('000' + CAST (t.TotalHours%3600/60 AS VARCHAR(2)), 2) + ':00' 
FROM (SELECT SUM(DATEDIFF(S, '00:00', TotalHours)) AS TotalHours 
     FROM workhour) t 
+0

Können Sie Ihre ursprünglichen Daten und erwartete Ausgabe zeigen – TheGameiswar

+1

Seien Sie methodisch. Hol dir die Stunden, Minuten und Sekunden einzeln und kombiniere sie dann. –

+0

meine Daten sind die ursprünglichen Daten aus meiner Tabelle, und die erwartete Ausgabe wurde unter – Crezzer7

Antwort

4

können Sie verwenden:

RIGHT('000' + CAST (t.time_sum%3600/60 AS VARCHAR(2)), 2) 

Dies nehmen die zwei am weitesten rechts stehenden Zeichen der Verkettung von '000' und den berechneten Minuten. Wenn also Ihre Minuten weniger als 10 Minuten sind, wird ein 0 vorne hinzugefügt. Resultierend in 01 - 60. Ich benutze immer mehr 0 als ich brauche, nur weil es egal ist, und ich werde immer sicher sein.

+0

habe es, krank post oben, danke für die Hilfe – Crezzer7

+1

@ Crezzer7 nur daran zu erinnern mach es auch stundenlang. – Stephen

1
Right('0'+cast(yourvalue as varchar(2)),2)