2012-03-14 43 views
2

我有一個表四個方面:執行日期/時間的減法運算

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 2012-03-15 00:24:28

回答

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 2012-03-15 00:22:00

+0

非常感謝你mitch – 2012-03-15 16:35:27

1

使用DateDiff

+0

謝謝!我剛剛更新了我的問題,請您看看 – 2012-03-14 23:45:09

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

謝謝。你可以請看看更新的問題 – 2012-03-14 23:45:25

1

嘗試

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

當然,你可以指定不同的日期部分爲DATEDIFF指定

+0

非常感謝!你能否看到更新 – 2012-03-14 23:44:58

+0

更新我的回答一個有效的(如果你的列是日期或日期時間) – Phil 2012-03-14 23:46:38

+0

操作數數據類型日期是無效的添加運算符。 – 2012-03-14 23:47:11

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

謝謝!你能否看看我更新的問題 – 2012-03-14 23:45:18