【问题标题】:Calculate duration from Times stored as Char(4)根据存储为 Char(4) 的时间计算持续时间
【发布时间】:2021-01-30 04:11:57
【问题描述】:

我正在尝试计算服务的持续时间,其中表中的时间存储为 Char(4) HHMM。例如,开始时间为 1402,即 14:02,结束时间为 1536,即 15:36。

我需要它返回 94 分钟的持续时间。当我尝试仅转换为数字并减去时,我得到 134。我尝试转换为时间,但我尝试的每个示例都会给我一个转换类型消息。

【问题讨论】:

  • 你有 3 个很好的答案。我对每个人都有 +1 的评价。我很好奇这个是怎么回事。我确实更喜欢其中一种解决方案,但我会保留我自己的意见:)

标签: sql sql-server datetime sql-server-2008 difference


【解决方案1】:

只需将值转换为time,然后使用DATEDIFF

SELECT DATEDIFF(MINUTE, CONVERT(time,STUFF(StartTime,3,0,':')),CONVERT(time,STUFF(EndTime,3,0,':')))
FROM dbo.YourTable;

【讨论】:

    【解决方案2】:

    你可以使用字符串函数和算术:

    select t.*,
        (left(starttime, 2) * 60 + right(starttime, 2) - left(endtime, 2) * 60 - left(endtime)) / 60 minutes_diff
    from mytable t
    

    这会将字符串转换为秒数,减去值,然后转换回分钟。

    【讨论】:

      【解决方案3】:

      您可以将差异转换为分钟,然后将其添加回零时间:

      select convert(time,
                     dateadd(minute,
                             (((et / 100) * 60) + (et % 60)) -  (((st / 100) * 60) + (st % 60)),
                             0)
                    )
      from (values (1402, 1536)) v(st, et);
      

      Here 是一个 dbfiddle。

      【讨论】:

        【解决方案4】:

        谢谢大家的回答,但我找到了答案!

        DateDiff(Minute, try_cast(substring(c.start_time, 1, 2) + ':' + substring(start_time, 3, 2) as time), 
                        try_cast(substring(stop_time, 1, 2) + ':' + substring(c.stop_time, 3, 2) as time))
        

        【讨论】:

        • 当然现在我们永远不会知道!这与@Larnu 的回答最相似
        【解决方案5】:

        任务:给定两个参数为 char(4)

        • 1402、1536 格式为 HHMM
        • 返回持续时间(分钟):15*60+36 - 14*60+02 => 94

        解决方案:

        SELECT (CAST(SUBSTRING('1536',1,2) AS int)*60 + CAST(SUBSTRING('1536',3,2) AS int)) - (CAST(SUBSTRING('1402',1,2) AS int)*60 + CAST(SUBSTRING('1402',3,2) AS int));

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-11-01
          • 2010-11-22
          • 2011-07-30
          • 1970-01-01
          • 2021-12-29
          • 2017-08-22
          • 1970-01-01
          相关资源
          最近更新 更多