如何使用 getdate() + 20 秒插入每一行



如何使用 getdate(( + 20 秒插入行 插入每行 + 20 秒

insert into Student (id, Name, Mar,cTime)  
select  id , Name , Mar , getdate() from sende

预期输出行 + 20 秒

| id| Name| Mar |   cTime             |
---------------------------------------
| 1 | ha1 | 100 | 2018-05-07 22:49:00 |
| 2 | ha2 | 200 | 2018-05-07 22:49:20 |
| 3 | ha3 | 300 | 2018-05-07 22:49:40 |
| 4 | ha4 | 400 | 2018-05-07 22:50:00 |
| 5 | ha5 | 500 | 2018-05-07 22:50:20 |

类似于肖恩的答案,但不是更新,只需在插入之前计算日期。

SQL 演示

CREATE TABLE sende
([id] int, [Name] varchar(3), [Mar] int)
;
INSERT INTO sende
([id], [Name], [Mar])
VALUES
(1, 'ha1', 100),
(2, 'ha2', 200),
(3, 'ha3', 300),
(4, 'ha4', 400),
(5, 'ha5', 500)
;
With cte as (
SELECT *, row_number() over ( ORDER BY [id]) -1 as rn
FROM sende
)    
SELECT *, DATEADD(ss, rn * 20, GETDATE()) as cTime
FROM cte

只需使用 dateadd 函数:

declare @Student table  
(  
id int ,  
Name varchar(50),  
Mar int ,
cTime datetime 
)  
insert into @Student (id, Name, Mar,cTime)  
values(1,'ha1',100,getdate()),  
(2,'ha2',200, dateadd(s,20,getdate())),
(3,'ha3',300,dateadd(s,40,getdate())),  
(4,'ha4',400,dateadd(s,60,getdate())),
(5,'ha5',500,dateadd(s,80,getdate()))
select * from @Student 

你可以用手动的方式完成:

SQL 演示

DECLARE @date DATETIME
SET @date = GETDATE()
declare @Student table  
(  
id int ,  
Name varchar(50),  
Mar int ,
cTime datetime 
)  
insert into @Student (id, Name, Mar,cTime) values(1,'ha1',100, @date)
SET @date = DATEADD(ss, 20, @date)
insert into @Student (id, Name, Mar,cTime) values(2,'ha2',200, @date)
SET @date = DATEADD(ss, 20, @date)
insert into @Student (id, Name, Mar,cTime) values(3,'ha3',300, @date)
SET @date = DATEADD(ss, 20, @date)
insert into @Student (id, Name, Mar,cTime) values(4,'ha4',400, @date)
SET @date = DATEADD(ss, 20, @date)
insert into @Student (id, Name, Mar,cTime) values(5,'ha5',500, @date)
SET @date = DATEADD(ss, 20, @date)
SELECT * FROM @student

有许多方法可以做到这一点。可能在插入过程中使用计数表或其他逻辑。但这是另一种方式。只需插入数据,然后使用ROW_NUMBER进行更新。它将在行数上是动态的,并且不需要对原始插入语句以外的值进行硬编码。

declare @Student table  
(  
id int ,  
Name varchar(50),  
Mar int ,
cTime datetime 
)  
;
insert into @Student (id, Name, Mar,cTime)  
values(1, 'ha1', 100, getdate()),  
(2, 'ha2', 200, getdate()),  
(3, 'ha3', 300, getdate()),  
(4, 'ha4', 400, getdate()),
(5, 'ha5', 500, getdate())  
select * from @Student; --so you can see the original values
with MyCTE as
(
select *
, RowNum = ROW_NUMBER() over (order by id) - 1
from @Student
)
update @Student
set cTime = dateadd(second, 20 * RowNum, c.cTime)
from MyCTE c;
select * from @Student; --every row is now 20 seconds greater than the row "before it"

以这种方式插入数据实际上没有意义,您也不会从应用程序中以这种方式插入数据。此外,您希望每行按顺序 20 秒。当你对数千行执行此操作时,它会变得混乱。那么,为什么不在SELECT上处理呢?

declare @Student table  
(  
id int ,  
Name varchar(50),  
Mar int ,
cTime datetime 
)  
insert into @Student (id, Name, Mar)  
values
(1,'ha1',100),  
(2,'ha2',200),  
(3,'ha3',300),  
(4,'ha4',400),
(5,'ha5',500) 

select
id
,name
,Mar
,cTime = dateadd(second,id * 20,getdate())
from @Student

或者,在插入所有内容后更新表,如果将有超过示例 5 行。

update @Student set cTime = dateadd(second,id * 20,getdate())

select * from @Student

最新更新