0

我们在应用程序端搞砸了,在一列中加载了一些不正确的数据。现在我们需要修复这些数据。这是我们需要做的。

Starttime                      Answertime

2012-08-30 00:40:40.000      2012-08-30 03:40:53.000

回答时间几乎比开始时间多 3 小时,这是不正确的。现在我们需要找到answertime 和 starttime 之间的秒差,并将其添加到 starttime 中。因此,对于上述 2012-08-30 00:40:53.000将是新的回答时间。

目前有点困惑如何去做。使用 sql server 2008 R2

4

2 回答 2

0
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

答案的要点是将 Minutes:Seconds.MilliSecs 放在一边,应答时间与开始时间相同。它还修复了第二行等边缘情况,其中更改使其早于开始时间。

于 2012-10-09T18:52:29.737 回答
0

假设您想忽略除秒之外的所有内容,但要处理差异超过一分钟的情况。

Update timetable set Answertime =
case when DatePart(ss,Answertime) >= DatePart(ss,Starttime) 
     then dateAdd(ss, DatePart(ss,Answertime)-DatePart(ss,starttime),Starttime)
else
     dateAdd(ss, 60+DatePart(ss,Answertime)-DatePart(ss,Starttime),Starttime)
end
于 2012-10-09T19:09:27.703 回答