我正在为我的工作在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
由于
答案 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'的结果。内部日期时间值以天数作为整数存储,时间以小数形式存储,因此通过减去一天(天),您将得到您所追求的结果。
但有两点需要注意:
如果您想要满足不到一天差异的可能性,您可以相应地有条件地修改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'