我正在使用SQL Server,我想修复的数据存在错误。
我想修复这些数据:
SELECT *
FROM [JBINFOTECH].[dbo].[leads]
WHERE calldate = '1970-01-01 01:00:00.000' ORDER BY id DESC;
所以基本上那些在日期时间1970-01-01 01:00:00.000
的领导者中有756个。
我想要做的是运行类似的查询:
UPDATE [JBINFOTECH].[dbo].[leads]
SET calldate = '2016-01-28 09:12:00.000'
WHERE calldate = '1970-01-01 01:00:00.000';
基本上我只想更新那些1970's
日期时间。但是有可能以分钟为单位更新756条记录中的每条记录吗?我们说
SET calldate = '2016-01-28 09:12:00.000'
所以这是开始和永远记录的时间会有5分钟的增量,所以基本上我将更新的下一条记录将成为
SET calldate = '2016-01-28 09:17:00.000'.
因为它不能是所有相同的值,所以应该有时间差异。是否可以在单个查询中使用?
答案 0 :(得分:2)
使用CTE和ROW_NUMBER:
;WITH CTE AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY ID) - 1 RN
FROM [JBINFOTECH].[dbo].[leads]
WHERE calldate = '1970-01-01 01:00:00.000'
)
UPDATE CTE
SET
CALLDATE = DATEADD(MINUTE, RN * 5, '2016-01-28 09:12:00.000')
答案 1 :(得分:-1)
你可以在一个临时表
中插入756行的id和生成的行号然后遍历临时表并更新原始表。
declare @newcalldate as datetime
SET @newcalldate = '2016-01-28 09:12:00.000'
/*loop start*/
set @tempid= --- //get id from current row.
UPDATE [JBINFOTECH].[dbo].[leads]
SET calldate = newcalldate
WHERE id=@tempid and calldate = '1970-01-01 01:00:00.000';
set @newcalldate=dateadd(mi,5,@newcalldate)
/* lood ends*/