数据库更新时间,基于SQL Server的记录数增量

时间:2016-01-29 08:14:26

标签: sql sql-server datetime

我正在使用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'.

因为它不能是所有相同的值,所以应该有时间差异。是否可以在单个查询中使用?

2 个答案:

答案 0 :(得分:2)

使用CTEROW_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*/