2017-04-07 5 views
1

Wie nur wenige Stunden und Minuten in einem Feld angezeigt werden, wenn ich sie separatNur Stunden und Minuten anzeigen?

[SELECT 
    D.numOperador, 
    SUM(DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada))/60 AS \[Horas\] , 
    SUM(DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada)) % 60 AS \[Minutos\] 

    FROM 
    trkOperadores O 
    INNER JOIN trfDespacho D ON O.NumOperador = D.numOperador 
WHERE 
    O.cveTipoOperador = 2 
    AND O.NumOperador = 900200 
    AND D.FechaSalida>='2017-03-10 00:00:00.000' AND D.FechaLlegada<='2017-03-11 00:00:00.000' 
GROUP BY 
    D.NumOperador; 
GO] 

Time

+0

Es ist nicht klar, was Sie versuchen, hier zu tun. –

+0

Was bedeutet "Join Stunden und Minuten in einem einzigen Feld" bedeuten. Das ist Unsinn, der klingt. – JNevill

+0

wo ist das Bild? –

Antwort

2

Wenn Sie beide nur lernen wollen Uhr und mns zusammen in dem Ergebnis kommen, verketten:

SELECT 
D.numOperador, 
    (cast (SUM(DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada))/60 as varchar) 
+ 
cast (SUM(DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada)) % 60 AS varchar) ) as time 

FROM 
trkOperadores O 
INNER JOIN trfDespacho D ON O.NumOperador = D.numOperador 
WHERE 
O.cveTipoOperador = 2 
AND O.NumOperador = 900200 
AND D.FechaSalida>='2017-03-10 00:00:00.000' AND D.FechaLlegada<='2017-03-11 00:00:00.000' 
GROUP BY 
D.NumOperador; 
GO] 
+0

Danke, Sie können das platzieren: Beispiel 8:11 – Molitaa

+0

Vielen Dank, Ich habe mit deinem Kommentar erreicht und fügst einfach + ':' + – Molitaa

+1

ein. Diese Antwort wäre noch besser, wenn du den Maßstab deiner Besetzung auf Varchar festgelegt hättest. Es ist keine gute Übung, sich auf die Standardgröße zu verlassen, da die Standardgröße abhängig von der Verwendung variieren kann. Unabhängig davon erhalten +1 –

0

Ich nehme an, dass Sie so etwas wollen.

DECLARE @D1 DATETIME = '20170401' 
DECLARE @D2 DATETIME = '20170402 00:05:00' 

SELECT RIGHT('00' + CAST(DATEDIFF(MINUTE, @D1, @D2) /60 AS VARCHAR(2)) , 2) + ':' + RIGHT('00' + CAST(DATEDIFF(MINUTE, @D1, @D2) % 60 AS VARCHAR(2)) , 2) 

-- 24:05 
0
SELECT 
    D.numOperador, 
    SUM(DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada))/60 AS [Horas] , 
    SUM(DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada)) % 60 AS [Minutos] 

    CONVERT(VARCHAR(10),CAST(CAST (D.FechaSalida AS FLOAT) - CAST (D.FechaLlegada AS FLOAT)/86400. AS DATETIME),108) --86400 equal 1 day 

    FROM 
    trkOperadores O  INNER JOIN trfDespacho D 
    ON O.NumOperador = D.numOperador 
WHERE 
    O.cveTipoOperador = 2 
    AND O.NumOperador = 900200 
    AND D.FechaSalida>='2017-03-10 00:00:00.000' AND D.FechaLlegada<='2017-03-11 00:00:00.000' 
GROUP BY 
    D.NumOperador; 
GO 
+0

Warum werfen Sie dies auf einen Float, um Mathe zu tun? Sie sollten DATEADD für Datumsmathematik verwenden. –

+0

Da intern auf Windows speichert es als float und es ist einfacher, so zu arbeiten. Wenn es für verschiedene Tage wäre, wäre das ein Problem. –

+0

Warum also nicht dateadd (Stunde ...) verwenden? –

Verwandte Themen