Sql server DATEDIFF-以小时和分钟为单位显示结果

Sql server DATEDIFF-以小时和分钟为单位显示结果,sql-server,tsql,time,hour,minute,Sql Server,Tsql,Time,Hour,Minute,我用下面的公式来确定两次之间的分钟数 DateDiff(Minute, [MondayOpenTime] , [MondayCloseTime]) 对于09:00的开始时间和17:30的结束时间,它返回值510 或者如果我使用: DateDiff(hour, [MondayOpenTime] , [MondayCloseTime]) 它返回8 我如何让它像08:30那样返回小时和分钟 使用分钟,然后除以60,得到8.5 注意。我已经讨论过许多类似的问题,如果有一个问题有确切的答案,我将删除此

我用下面的公式来确定两次之间的分钟数

DateDiff(Minute, [MondayOpenTime] , [MondayCloseTime])
对于09:00的开始时间和17:30的结束时间,它返回值510

或者如果我使用:

DateDiff(hour, [MondayOpenTime] , [MondayCloseTime])
它返回8

我如何让它像08:30那样返回小时和分钟

使用分钟,然后除以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)

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

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')
前提是日期在同一天。(既然现在是开放时间,那就不成问题了)

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

format(cast([MondayCloseTime] as datetime) - cast([MondayOpenTime] as datetime), 'HH:mm')
(旁注:格式仅在sql server 2012及更高版本上可用)

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

format([MondayCloseTime] - [MondayOpenTime], 'HH:mm')
前提是日期在同一天。(既然现在是开放时间,那就不成问题了)

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

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

(旁注:格式仅在sql server 2012及更高版本上可用)

鉴于日期是开放时间并且应该在同一天,您可以使用
格式([MondayCloseTime]-[MondayOpenTime],'HH:mm')
@Me.Name好主意。不过,您必须将时间转换为日期时间才能执行直接数学运算。这在时间数据类型上是不允许的。@Me.Name为什么不将其作为答案发布?您可以使用“我的变量”,如果将其转换为datetime内部格式,效果会很好。@SeanLange关于
time
数据类型的观点很好。不作为答案发布的主要原因是对是否在同一日期发布的警告。错过了
时间
s可能正在使用。感谢您的建议,将其作为额外答案添加。鉴于日期是开放时间,应该在同一天,您可以使用
格式([MondayCloseTime]-[MondayOpenTime],'HH:mm')
@Me.Name nice idea。不过,您必须将时间转换为日期时间才能执行直接数学运算。这在时间数据类型上是不允许的。@Me.Name为什么不将其作为答案发布?您可以使用“我的变量”,如果将其转换为datetime内部格式,效果会很好。@SeanLange关于
time
数据类型的观点很好。不作为答案发布的主要原因是对是否在同一日期发布的警告。错过了
时间
s可能正在使用。谢谢你的建议,将其作为额外的答案添加