【问题标题】:SQL Converting to HH:MM:SS with an equation - Not working CorrectlySQL 使用方程式转换为 HH:MM:SS - 无法正常工作
【发布时间】:2017-12-08 19:55:10
【问题描述】:

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

2 列是 Dispo 和 Dead 都是 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    

(e.g.中的数字不一定是结果,只是格式的一个例子)

样本数据是:

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

此示例的预期结果为 0 小时 14 分 24 秒:

0:14:24

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

【问题讨论】:

  • 那是无效的标准 SQL。您使用的是哪个 DBMS?
  • 看起来像t-sql,意思是sql server。请编辑您的问题以包含一些示例数据作为 DDL+DML 和所需的结果。
  • 期望的结果已经存在。还添加了一些示例数据
  • 是的,但它不是您期望从样本数据中得到的。这就是我编辑你的问题的原因。 (并添加 Sql Server 标签)

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


【解决方案1】:

这是一种方法 -

创建并填充示例表(在您以后的问题中保存我们这一步)

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.

【讨论】:

    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 2015-01-21
    相关资源
    最近更新 更多