declare @t table (
Starttime datetime,
Answertime datetime);
insert @t values (
'2012-08-30 00:40:40.000','2012-08-30 03:40:53.000'),(
'2012-08-30 00:59:59.900','2012-08-30 03:00:03.000');
update @t set Answertime =
case when dateadd(hh,datediff(hh,answertime,starttime),answertime) > starttime
then dateadd(hh,datediff(hh,answertime,starttime),answertime)
else dateadd(hh,datediff(hh,answertime,starttime)+1,answertime) end
where Answertime > DateAdd(hh,1,StartTime); -- more than 1 hour apart
select * from @T;
>>
STARTTIME ANSWERTIME
August, 30 2012 00:40:40 August, 30 2012 00:40:53
August, 30 2012 00:59:59 August, 30 2012 01:00:03
答案的要點是,離開分鐘:Seconds.MilliSecs不談,answertime放入同一時間的開始時間。它還修復了第二行等邊界情況,其中更改使其早於啓動時間。
「Answertime」總是精確地關閉3小時嗎?如果是這樣,那是一個簡單的修復。如果你只用秒,那麼當每個值的分鐘不同時會發生什麼? – RedFilter
是的..這就是問題..小時差異並不總是3小時,並且需要考慮分鐘差異。 – user1679411
如果您需要考慮分鐘,那麼您也需要考慮小時差。和日,月,年:)例如,'Starttime ='2012-12-31 11:59:59'' – RedFilter