0

アプリケーション側でエラーが発生し、1 つの列に誤ったデータが読み込まれました..今度は、このデータを修正する必要があります..次の作業を行う必要があります。

Starttime                      Answertime

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

Answertime は starttime よりもほぼ 3 時間長いですが、これは正しくありません。ここで必要なのは、回答時間と開始時間の秒数の差を見つけて開始時間に追加することです。したがって、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 は別として、応答時間は開始時間と同じ時間に入れられるということです。また、変更によって開始時刻よりも早くなる 2 行目のようなエッジ ケースも修正されます。

于 2012-10-09T18:52:29.737 に答える
0

秒以外のすべてを無視したいが、差が 1 分を超える場合を処理すると仮定します。

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 に答える