2012-03-14 2 views
2

У меня есть четыре поля в таблице:Выполнение даты/времени вычитания в SQL Server

date entered, time entered, date completed, time completed 

я хотел бы знать разницу между датой/временем занесут и дата/время ЗАВЕРШЕНА

, например

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

разница 25 часов.

Как я могу выполнить это вычисление с помощью оператора select?

я просто попытался это:

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

и получил следующее сообщение об ошибке:

Msg 8116, Level 16, State 1, Line 2 
Argument data type time is invalid for argument 2 of dateadd function. 
+0

Эта тема рассматривается здесь. http://stackoverflow.com/questions/700619/how-to-combine-date-from-one-field-with-time-from-another-field-ms-sql-server – Griffin

ответ

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)) 

Таким образом, с точки зрения столбцов ваших таблиц:

select datediff(hh, [date entered] + cast([time entered] as datetime), 
        [date completed] + cast([time completed] as datetime)) as [Hours] 
+0

+1 Это правильный ответ, хотя я бы выбрал поле «дата» для даты и времени вместо «времени». – Griffin

+0

Большое вам спасибо. –

1

Использование DateDiff

+0

спасибо! я только что обновил свой вопрос, можете ли вы взглянуть, пожалуйста, –

2
select datediff(hour,'1/1/2001 10:00','1/2/2001 11:00') 
+0

спасибо. вы можете посмотреть обновленный вопрос –

1

Try

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

для получения результата в секундах.

Вот автономный пример:

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)) 

И, конечно, вы можете указать различные dateparts, как указано для DATEDIFF.

+0

большое спасибо! вы можете увидеть обновление –

+0

обновил мой ответ на тот, который работает (если ваши столбцы являются датой или датой) – Phil

+0

Дата ввода данных операндов недействительна для оператора добавления. –

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]; 
+0

спасибо! не могли бы вы взглянуть на мой обновленный вопрос? –

Смежные вопросы