DATEDIFF - 以小时和分钟显示结果

DATEDIFF - Display result in Hours and minutes

我使用下面的方法来确定两次之间的分钟数,

DateDiff(Minute, [MondayOpenTime] , [MondayCloseTime])

对于 09:00 的开始时间和 17:30 的结束时间,它 return 的值为 510

或者如果我使用:

DateDiff(hour, [MondayOpenTime] , [MondayCloseTime])

它returns 8,

我怎样才能像 08:30

这样的 return 小时和分钟

使用分钟,然后除以 60,得到 8.5,

注意。我已经经历过很多与此类似的问题,如果有一个有确切答案我会删除这个,但我目前还找不到任何答案

您可以按您说的那样按除法计算小时数。然后您可以使用模数来计算分钟数。

declare @MondayOpenTime time = '09:00'
    , @MondayCloseTime time = '17:30'

select convert(varchar(2), DateDiff(Minute, @MondayOpenTime , @MondayCloseTime) / 60) + ':' + right('0' + convert(varchar(2), DateDiff(Minute, @MondayOpenTime , @MondayCloseTime) % 60), 2)

对于 datetime(2) 数据类型,可以使用以下数据类型:

format([MondayCloseTime] - [MondayOpenTime], 'HH:mm')

前提是日期是同一天。 (因为这些是开放时间,所以这应该不是问题)

正如 Sean 指出的那样:对于 time 数据类型,减法不可能直接实现,需要额外的转换:

format(cast([MondayCloseTime] as datetime) - cast([MondayOpenTime] as datetime), 'HH:mm')

(旁注:格式仅适用于 sql-server 2012 及更高版本)