可以在这个上使用大师的帮助。尝试计算两个日期时间值之间的时间并在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.
感谢您提供任何指导。
答案 0 :(得分:4)
您可以在几秒钟内获得总差异,然后继续从中获取最大部分。即,从天开始,然后是小时,分钟和秒。
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)
将返回总小时数,而不是整天的小时数。
答案 1 :(得分:2)
只是为了与众不同:) 尝试使用这种方法:
声明@ date1 datetime; 声明@ date2 datetime;
set @date1 = '2012-05-01 12:00:000'
set @date2 = '2012-05-01 18:00:000'
SELECT
STUFF(
STUFF(
STUFF(
RIGHT(CONVERT(NVARCHAR(19), CONVERT(DATETIME, DATEADD(second, DATEDIFF(S, @date1, @date2), '20000101')), 120), 11),
3, 1, 'D, '),
8, 1, 'H, '),
13, 1, 'M, ') + ' S';
答案 2 :(得分:1)
终于在这个环节找到了一个很好的解决方案, SQL - Seconds to Day, Hour, Minute, Second 感谢大家的帮助,它让我进一步深入研究这个问题,并寻找正确的信息。