2017-04-07 110 views
1

如何只显示小时和分钟在外地,如果我让他们单独只显示小时和分钟?

[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

这是不完全清楚你正试图在这里做。 –

+0

什么是“在单个字段中加入小时和分钟”的意思。这是无稽之谈。 – JNevill

+0

图片在哪里? –

回答

2

如果你只是想在结果中加入小时,MNS在一起,串联两者:

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

谢谢,您可以放置​​:例如8:11 – Molitaa

+0

非常感谢,我已经实现了您的评论,只需添加+':'+ – Molitaa

+1

如果您将投影的比例指定为varchar,则此答案会更好。依赖于默认大小并不是一个很好的做法,因为默认大小可以根据使用情况而有所不同。无论如何获得+1 –

0

我假设你想要这样的东西。

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

为什么你把这个转换成浮动数学?您应该使用DATEADD进行日期数学计算。 –

+0

由于Windows内部它保存为浮点,因此更容易以这种方式工作。如果是在不同的日子,这将是一个问题。 –

+0

那么为什么不使用dateadd(小时...)? –