可以在这个问题上使用大师的帮助。试图计算两个日期时间值之间的时间并在 T-SQL 查询中显示为时间...
SELECT arrivalDate - departDate AS timeToComplete
这应始终少于 24 小时。但是谁知道用户实际上可能输入什么?
我一直在尝试这样的事情,但没有结果。
SELECT
CAST(time(7),
CONVERT(datetime, arrivalDate - departDate) AS timeToComplete) AS newTime,
而不是将结果显示为
1:23:41
例如,有没有办法显示如下结果:0D, 1H, 23M, 33S.
感谢您对此的任何指导。
最佳答案
您可以在几秒钟内获得总差异,然后继续从中取出最大的部分。即,从天开始,然后是小时、分钟和秒。
DECLARE @arrivalDate DATETIME = '2013-01-19 23:59:59'
DECLARE @departDate DATETIME = '2013-01-25 11:52:30'
DECLARE @SecondsDifference INT = DATEDIFF(SECOND, @arrivalDate, @departDate)
DECLARE @DayDifference INT = @SecondsDifference / 86400
DECLARE @HourDifference INT = (@SecondsDifference - (@DayDifference * 86400)) / 3600
DECLARE @MinDifference INT = (@SecondsDifference - (@DayDifference * 86400) - (@HourDifference * 3600)) / 60
DECLARE @SecDifference INT = (@SecondsDifference - (@DayDifference * 86400) - (@HourDifference * 3600) - (@MinDifference * 60))
为清楚起见,我在这里使用变量完成了它,但您可以将其处理为单个查询。 DATEDIFF 不适用于较小的差异块,直到您删除较大的差异块,因为您会得到总数。例如:
DATEDIFF(HOUR, @arrivalDate, @departDate)
将返回总小时数,而不是减去整天的小时数。
关于sql-server - T-SQL 将计算列格式化为时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14859817/