在SQL中查找两个不同日期之间的HH:MM数

时间:2017-10-26 16:19:31

标签: sql-server date difference

我正在为我的工作在SQL中创建一个周转时间报告,并且需要能够在考虑DAYS和HOURS的情况下计算两个不同日期之间的HH:MM的数量。我似乎找到了许多能够带回时间的答案,但也需要DAYS。

EX:HH:MM之间的区别'2017-04-18 16:03:00.000'和'2017-04-19 20:59:00.000'

当前正在尝试

CONVERT (CHAR(5),turn.[ADMIN DTTM]-turn.[VERIFY DTTM], 108) as 'VERIFIED to ADMINISTERED'

这是返回HH:MM但仅适用于“00:00:00:00”表示:04:56

但我需要回归的是日期和时间的组合: 28:56 01:04:56

由于

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT FORMAT([Minutes] / 1440, '#') + ':' 
  + FORMAT(([Minutes] % 1440) / 60, '00') + ':' 
  + FORMAT([Minutes] % 60, '00') AS [Result]
FROM
(
  SELECT DATEDIFF(mi, turn.[ADMIN DTTM], turn.[VERIFY DTTM]) AS [Minutes]
  FROM 
  (
    SELECT '2017-04-18 16:03:00.000' AS [ADMIN DTTM], '2017-04-19 20:59:00.000' AS [VERIFY DTTM]
  ) turn
) t

您需要更换

  

(SELECT'2017-04-18 16:03:00.000'AS [ADMIN DTTM],'2017-04-19 20:59:00.000'AS [VERIFY DTTM])

与你的桌子。

答案 1 :(得分:0)

你通过从另一个中减去一个值来采取正确的方法。诀窍是使用FORMAT函数指定您希望结果的天数,小时数和分钟数。

SELECT FORMAT(turn.[VERIFY DTTM]-turn.[ORDER DTTM] - 1,'dd:HH:mm') as 'ORDERED to VERIFIED'

要了解为什么需要“ - 1”,您需要了解您要获得的结果类型。如果你有:

SELECT turn.[VERIFY DTTM]-turn.[ORDER DTTM]

您会看到差异从“1900-01-01 00:00:00.000”开始作为日期时间返回。正好一天的差异会产生'1900-01-0 2 00:00:00.000'的结果。内部日期时间值以天数作为整数存储,时间以小数形式存储,因此通过减去一天(天),您将得到您所追求的结果。

但有两点需要注意:

  1. 仅当天数差异小于或等于31(即1月份的天数)时,此方法才有效。
  2. 如上所述,只有在至少一天的差异时才会有效,例如在您的示例中。
  3. 如果您想要满足不到一天差异的可能性,您可以相应地有条件地修改FORMAT字符串。

    SELECT FORMAT(turn.[VERIFY DTTM]-turn.[ORDER DTTM] - 1,IIF(turn.[VERIFY DTTM]-turn.[ORDER DTTM] < 1,'00','dd') + ':HH:mm') as 'ORDERED to VERIFIED'