更新表的日期时间字段,每次添加秒

时间:2016-09-26 22:40:40

标签: sql-server tsql

我有大约10,000条记录,我希望从特定时间开始展开保留的处理DATETIME字段。

所以我想遍历所有记录,将日期的秒数更新为特定时间,然后下一条记录再添加2秒到上一个日期时间,直到所有记录都有2秒添加到开始日期时间。

即。 第1行的Date1 2016-09-26 18:27:50.000 第2行的Date2 2016-09-26 18:27:52.000 第3行的Date3 2016-09-26 18:27:54.000

while循环可以实现吗?

create table #secondsiterate ( procdate datetime )
insert into #secondsiterate ( procdate )
select GETDATE()

WHILE (just want to add 2 seconds to each date field until it is done)
BEGIN
UPDATE #secondsiterate set procdate = DATEADD(ss,2,procdate)
END;

1 个答案:

答案 0 :(得分:1)

假设您正在尝试更新" DateColumn"在表格#34; MyTable"中,有一列" OrderColumn"您可以使用表中的(不是DateColumn)来排序以确定哪些行获取了哪些值,然后,以下SQL应该执行您想要的操作。

DECLARE @startDate datetime;
SELECT @startDate = GETDATE(); -- Set this however you wish
UPDATE x
   SET DateColumn = DATEADD(SS, 2*rn, @startDate)
  FROM (SELECT *, (ROW_NUMBER() OVER (ORDER BY orderColumn)) AS rn FROM YourTable) x

您需要将@startDate变量...设置为当前日期(如图所示),或者设置为表格中DateColumn的MAX或MIN日期...但是您需要申请。

避免WHILE和FOR循环的秘诀是在子选择或CTE(公用表表达式)中使用ROW_COUNT()。这使您可以使用比迭代循环或游标更快,更高效的集合操作。

相关问题