How to compare two dates to find time difference in SQL Server 2005, date manipulation

后端 未结 11 1809
天命终不由人
天命终不由人 2020-11-27 14:55

I have two columns:

job_start                         job_end
2011-11-02 12:20:37.247           2011-11-02 13:35:14.613

How would it be po

相关标签:
11条回答
  • 2020-11-27 15:15

    Cast the result as TIME and the result will be in time format for duration of the interval.

    select CAST(job_end - job_start) AS TIME(0)) from tableA
    
    0 讨论(0)
  • 2020-11-27 15:17

    If you trying to get worked hours with some accuracy, try this (tested in SQL Server 2016)

    SELECT DATEDIFF(MINUTE,job_start, job_end)/60.00;
    

    Various DATEDIFF functionalities are:

    SELECT DATEDIFF(year,        '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
    SELECT DATEDIFF(quarter,     '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
    SELECT DATEDIFF(month,       '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
    SELECT DATEDIFF(dayofyear,   '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
    SELECT DATEDIFF(day,         '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
    SELECT DATEDIFF(week,        '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
    SELECT DATEDIFF(hour,        '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
    SELECT DATEDIFF(minute,      '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
    SELECT DATEDIFF(second,      '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
    SELECT DATEDIFF(millisecond, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
    

    Ref: https://docs.microsoft.com/en-us/sql/t-sql/functions/datediff-transact-sql?view=sql-server-2017

    0 讨论(0)
  • 2020-11-27 15:18

    Try this in Sql Server

    SELECT 
          start_date as firstdate,end_date as seconddate
           ,cast(datediff(MI,start_date,end_date)as decimal(10,3)) as minutediff
          ,cast(cast(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60) as int ) as varchar(10)) + ' ' + 'Days' + ' ' 
          + cast(cast((cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60) - 
            floor(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60)) ) * 24 as int) as varchar(10)) + ':' 
    
         + cast( cast(((cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60) 
          - floor(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60)))*24
            -
            cast(floor((cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60) 
          - floor(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60)))*24) as decimal)) * 60 as int) as varchar(10))
    
        FROM [AdventureWorks2012].dbo.learndate
    
    0 讨论(0)
  • 2020-11-27 15:18

    Below code gives in hh:mm format.

    select RIGHT(LEFT(job_end- job_start,17),5)

    0 讨论(0)
  • 2020-11-27 15:20

    I think you need the time gap between job_start & job_end.

    Try this...

    select SUBSTRING(CONVERT(VARCHAR(20),(job_end - job_start),120),12,8) from tableA
    

    I ended up with this.

    01:14:37
    
    0 讨论(0)
  • 2020-11-27 15:23

    You can use the DATEDIFF function to get the difference in minutes, seconds, days etc.

    SELECT DATEDIFF(MINUTE,job_start,job_end)
    

    MINUTE obviously returns the difference in minutes, you can also use DAY, HOUR, SECOND, YEAR (see the books online link for the full list).

    If you want to get fancy you can show this differently for example 75 minutes could be displayed like this: 01:15:00:0

    Here is the code to do that for both SQL Server 2005 and 2008

    -- SQL Server 2005
    SELECT CONVERT(VARCHAR(10),DATEADD(MINUTE,DATEDIFF(MINUTE,job_start,job_end),'2011-01-01 00:00:00.000'),114)
    
    -- SQL Server 2008
    SELECT CAST(DATEADD(MINUTE,DATEDIFF(MINUTE,job_start,job_end),'2011-01-01 00:00:00.000') AS TIME)
    
    0 讨论(0)
提交回复
热议问题