Difference of two date time in sql server

后端 未结 20 1939
心在旅途
心在旅途 2020-12-01 03:53

Is there any way to take the difference between two datetime in sql server?

For example, my dates are

  1. 2010-01-22 15:29:55.090
相关标签:
20条回答
  • 2020-12-01 04:28

    There are a number of ways to look at a date difference, and more when comparing date/times. Here's what I use to get the difference between two dates formatted as "HH:MM:SS":

    ElapsedTime AS
          RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate)        / 3600 AS VARCHAR(2)), 2) + ':'
        + RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 3600 /   60 AS VARCHAR(2)), 2) + ':'
        + RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) %   60        AS VARCHAR(2)), 2)
    

    I used this for a calculated column, but you could trivially rewrite it as a UDF or query calculation. Note that this logic rounds down fractional seconds; 00:00.00 to 00:00.999 is considered zero seconds, and displayed as "00:00:00".

    If you anticipate that periods may be more than a few days long, this code switches to D:HH:MM:SS format when needed:

    ElapsedTime AS
        CASE WHEN DATEDIFF(S, StartDate, EndDate) >= 359999
            THEN
                              CAST(DATEDIFF(S, StartDate, EndDate) / 86400        AS VARCHAR(7)) + ':'
                + RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 86400 / 3600 AS VARCHAR(2)), 2) + ':'
                + RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) %  3600 /   60 AS VARCHAR(2)), 2) + ':'
                + RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) %    60        AS VARCHAR(2)), 2)
            ELSE
                  RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate)        / 3600 AS VARCHAR(2)), 2) + ':'
                + RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) % 3600 /   60 AS VARCHAR(2)), 2) + ':'
                + RIGHT('0' + CAST(DATEDIFF(S, StartDate, EndDate) %   60        AS VARCHAR(2)), 2)
            END
    
    0 讨论(0)
  • 2020-12-01 04:29

    The following query should give the exact stuff you are looking out for.

    select datediff(second, '2010-01-22 15:29:55.090' , '2010-01-22 15:30:09.153')
    

    Here is the link from MSDN for what all you can do with datediff function . https://msdn.microsoft.com/en-us/library/ms189794.aspx

    0 讨论(0)
  • 2020-12-01 04:32
    SELECT  DATEDIFF(day, '2010-01-22 15:29:55.090', '2010-01-22 15:30:09.153')
    

    Replace day with other units you want to get the difference in, like second, minute etc.

    0 讨论(0)
  • 2020-12-01 04:33
    declare @dt1 datetime='2012/06/13 08:11:12', @dt2 datetime='2012/06/12 02:11:12'
    
    select CAST((@dt2-@dt1) as time(0))
    
    0 讨论(0)
  • 2020-12-01 04:33

    Sol-1:

    select 
      StartTime
      , EndTime
      , CONVERT(NVARCHAR,(EndTime-StartTime), 108) as TimeDiff 
    from 
      [YourTable]
    

    Sol-2:

    select 
      StartTime
      , EndTime
      , DATEDIFF(hh, StartTime, EndTime)
      , DATEDIFF(mi, StartTime, EndTime) % 60 
    from 
      [YourTable]
    

    Sol-3:

    select 
      DATEPART(hour,[EndTime]-[StartTime])
      , DATEPART(minute,[EndTime]-[StartTime]) 
    from 
      [YourTable]
    

    Datepart works the best

    0 讨论(0)
  • 2020-12-01 04:34

    So this isn't my answer but I just found this while searching around online for a question like this as well. This guy set up a procedure to calculate hours, minutes and seconds. The link and the code:

    --Creating Function
    If OBJECT_ID('UFN_HourMinuteSecond') Is Not Null
    Drop Function dbo.UFN_HourMinuteSecond
    Go
    Exec(
    'Create Function dbo.UFN_HourMinuteSecond
    (
    @StartDateTime DateTime,
    @EndDateTime DateTime
    ) Returns Varchar(10) 
    As
    Begin
    
    Declare @Seconds Int,
    @Minute Int,
    @Hour Int,
    @Elapsed Varchar(10)
    
    Select @Seconds = ABS(DateDiff(SECOND ,@StartDateTime,@EndDateTime))
    
    If @Seconds >= 60 
    Begin
    select @Minute = @Seconds/60
    select @Seconds = @Seconds%60
    
    If @Minute >= 60
    begin
    select @hour = @Minute/60
    select @Minute = @Minute%60
    end
    
    Else
    Goto Final 
    End
    
    Final:
    Select @Hour = Isnull(@Hour,0), @Minute = IsNull(@Minute,0), @Seconds =               IsNull(@Seconds,0)
    select @Elapsed = Cast(@Hour as Varchar) + '':'' + Cast(@Minute as Varchar) + '':'' +     Cast(@Seconds as Varchar)
    
    Return (@Elapsed)
    End'
    )
    
    0 讨论(0)
提交回复
热议问题