SQL转换为HH:MM:带方程式的SS - 无法正常工作

时间:2017-07-05 08:47:34

标签: sql sql-server sql-server-2012 type-conversion date-conversion

我试图在几秒内从另一列的总和中减去一列的总和,然后将其转换为HH:MM:SS。然而,转换要求它能够超过24小时,因为这是一个总和时间。我的转换在单列上运行没有问题所以很明显我试图这样做的方程式但是无法弄清楚如何去做。

这两列是Dispo&死了都是Ints。

这就是我所拥有的:

CONVERT(varchar(6), SUM([Dispo])-SUM(Dead)/3600)
+ ':' + RIGHT('0' + CONVERT(varchar(2), (SUM([Dispo])-SUM(Dead)% 3600) / 60), 2)
+ ':' + RIGHT('0' + CONVERT(varchar(2), SUM([Dispo])-SUM(Dead) % 60), 2) AS [AfterCallWork],

它给我的结果是:

AfterCallWork   
26809:0*:0* 

我想要的结果,例如是:

AfterCallWork
35:51:09    

(例如,数字中的数字不一定只是格式的一个例子)

示例数据是:

UniqueID | Dead | Dispo
135151   | 20   | 200
161681   | 35   | 421
516168   | 10   | 308

此样本的预期结果为0小时,14分钟和24秒:

0:14:24

死了& Dispo是给定状态或模式下的秒数。唯一ID本质上是一个呼叫标识符。

1 个答案:

答案 0 :(得分:0)

这是一种方法 -

创建并填充样本表(在将来的问题中保存此步骤)

DECLARE @T AS TABLE
(
    UniqueID int,
    Dead int,
    Dispo int
)

INSERT INTO @T VALUES
(135151, 20, 200),
(161681, 35, 421),
(516168, 10, 308)

使用CTE获取SUM([Dispo])-SUM(Dead) - 此步骤只是为了让代码更具可读性,您不需要这样做,但它有助于:

;WITH CTE(NumberOfSeconds) AS
(
    SELECT SUM([Dispo])-SUM(Dead)
    FROM @T
)

将您从CTE获得的秒数转换为字符串表示形式hh:mm:ss

SELECT  CAST(NumberOfSeconds /3600 as varchar(6)) + ':' +
        RIGHT('0' + CAST((NumberOfSeconds % 3600) / 60 as varchar(2)), 2) + ':' +
        RIGHT('0' + CAST(NumberOfSeconds % 60 as varchar(2)), 2) As AfterCallWork
FROM CTE

结果:

AfterCallWork
0:14:24

See a live demo on rextester.