我们在应用程序方面搞砸了,并在一列中加载了一些不正确的数据。现在我们需要修复这些数据。这是我们需要做的。
Starttime Answertime
2012-08-30 00:40:40.000 2012-08-30 03:40:53.000
Answertime比启动时间快3个小时,这是不正确的。现在我们需要找到answertime和startime之间秒的区别并将其添加到starttime。所以2012-08-30 00:40:53.000 将是新的回答。
目前有点困惑如何做到这一点。使用sql server 2008 R2
答案 0 :(得分: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放在一边,将answertime放入与开始时间相同的小时。它还修复了第二行的边缘情况,其中更改使其早于启动时间。
答案 1 :(得分: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