3

i have four fields in a table:

date entered, time entered, date completed, time completed

i would like to know the difference between date/time ENTERED and date/time COMPLETED

for example

date entered = 1/1/2001
time entered = 10:00
time completed = 1/2/2001
time completed = 11:00

the difference is 25 hours.

how can i perform this computation with a select statement?

i just tried this:

DATEDIFF(hh,dateadd(hh,[Time Entered],[Date Entered]),dateadd(hh,[Time Completed],[Date Completed]) ) AS [Hours]

and got the following error:

Msg 8116, Level 16, State 1, Line 2
Argument data type time is invalid for argument 2 of dateadd function.
JimmyPena
  • 8,630
  • 6
  • 42
  • 64
Alex Gordon
  • 54,010
  • 276
  • 644
  • 1,024
  • This topic is covered here, too. http://stackoverflow.com/questions/700619/how-to-combine-date-from-one-field-with-time-from-another-field-ms-sql-server – Griffin Mar 15 '12 at 00:24

5 Answers5

5
Declare @dateentered date = '20010101'
Declare @timeentered time = '10:00' 
Declare @datecompleted date = '20010102' 
Declare @timecompleted time = '11:00'

select datediff(hh, @dateentered + cast(@timeentered as datetime), 
                    @datecompleted + cast(@timecompleted as datetime))

So, in terms of your tables' columns:

select datediff(hh, [date entered] + cast([time entered] as datetime), 
                    [date completed] + cast([time completed] as datetime)) as [Hours]
Mitch Wheat
  • 288,400
  • 42
  • 452
  • 532
  • +1 This is the correct answer, although I would have casted the "date" field to a datetime instead of the "time". – Griffin Mar 15 '12 at 00:22
3
select datediff(hour,'1/1/2001 10:00','1/2/2001 11:00')
Thit Lwin Oo
  • 3,320
  • 3
  • 19
  • 23
1

Use DateDiff

Coltech
  • 1,602
  • 3
  • 16
  • 31
1

Try

select DateDiff(ss, [Date Entered] + convert(datetime, [Time Entered]), 
                    [Date Completed] + convert(datetime, [Time Completed])) 
from myTable

to get the result in seconds.

Here's a standalone example:

declare @dateentered date = '1/1/2001'
declare @timeentered time = '10:00'
declare @datecompleted date = '1/2/2001'
declare @timecompleted time = '11:00'

select DateDiff(ss, 
    @dateentered + convert(datetime, @timeentered), 
    @datecompleted + convert(datetime, @timecompleted)) 

And of course you can specify different dateparts as specified for DATEDIFF.

Phil
  • 40,927
  • 8
  • 95
  • 100
0
DECLARE @StartDate DATETIME
Declare @EndDate DATETIME
declare @startime datetime
declare @endime datetime

SET @StartDate = '2001-01-01'
set @startime = '10:00'
SET @EndDate = '2001-01-02'
set @endime = '11:00'

set @StartDate = @StartDate + @startime
set @EndDate = @EndDate + @endime

--To get only Hours
SELECT DATEDIFF(hh, @StartDate,@EndDate ) AS [Hours];
Taryn
  • 234,956
  • 54
  • 359
  • 399