5

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

感谢您对此的任何指导。

4

3 回答 3

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) 

将返回总小时数,而不是小时数减去一整天。

于 2013-02-13T18:30:06.207 回答
2

只是为了与众不同:) 尝试使用这种方法:

声明@date1 日期时间;声明@date2 日期时间;

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';
于 2013-02-13T18:10:39.473 回答
1

终于在这个链接上找到了一个很好的解决方案, SQL - Seconds to Day, Hour, Minute, Second 感谢大家的帮助,它让我进一步了解了这个问题并搜索了正确的信息。

于 2013-02-13T20:30:36.487 回答