T-SQL格式化计算列为时间

时间:2013-02-13 17:51:57

标签: sql-server tsql datetime

可以在这个上使用大师的帮助。尝试计算两个日期时间值之间的时间并在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. 

感谢您提供任何指导。

3 个答案:

答案 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 感谢大家的帮助,它让我进一步深入研究这个问题,并寻找正确的信息。