Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用getdate()+20秒插入每一行_Sql Server - Fatal编程技术网

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

Sql server 如何使用getdate()+20秒插入每一行,sql-server,Sql Server,如何使用getdate+20秒插入行 插入每行+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

如何使用getdate+20秒插入行 插入每行+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 |
范例

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 |

只需使用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 

只需使用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 

您可以手动执行此操作:


您可以手动执行此操作:


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

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"

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

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上处理它呢

或者,在插入所有内容后更新表,如果样本行数将超过5行

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


select * from @Student

以这种方式插入数据是没有意义的,您也不会从应用程序中以这种方式插入数据。另外,每行需要20秒。当你这样做数千行,它会变得混乱。那么,为什么不在SELECT上处理它呢

或者,在插入所有内容后更新表,如果样本行数将超过5行

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


select * from @Student

与Sean answer类似,但不是更新,而是在插入之前计算日期


与Sean answer类似,但不是更新,而是在插入之前计算日期


这与问题中的示例太过直接了。我添加了通过使用dateadd解决用户问题所需的代码。它可以在不使用多个等待语句的情况下工作。这对于问题中的示例来说太过直白了。我添加了通过使用dateadd解决用户问题所需的代码。它在不使用多个等待语句的情况下工作。什么是2018-05-07 22:49:60。你的下一排不是2018-05-07 22:50:00吗?你把问题换成了一个完全不同的问题。先生,如果第一行是2018-05-07 22:49:60下一行+20秒2018-05-07 22:50:20我向您道歉2018-05-07 22:49:60不是实时戳记,请至少在您的回复中包括您发送的内容。。。分秒从0到59除非我错过了什么你是对的西蒙先生我错了我向你道歉什么是2018-05-07 22:49:60。你的下一排不是2018-05-07 22:50:00吗?你把问题换成了一个完全不同的问题。先生,如果第一行是2018-05-07 22:49:60下一行+20秒2018-05-07 22:50:20我向您道歉2018-05-07 22:49:60不是实时戳记,请至少在您的回复中包括您发送的内容。。。分秒从0到59,除非我错过了什么你是对的,西蒙先生,我错了,我向你道歉另一个有趣的方法。我试图找到一个默认值方法,因为我怀疑OP过于简化了它们的question@scsimon我也是。这是一个相当奇怪的要求,要么是某位教授提出了一个令人毛骨悚然的问题,与现实世界中的任何事情相比都毫无意义,要么是过于简化,以至于失去了原始问题的意义。同意,特别是因为他们在OP中不断发布60秒的时间戳。另一个有趣的方法。我试图找到一个默认值方法,因为我怀疑OP过于简化了它们的question@scsimon我也是。这是一个相当奇怪的要求,要么是某位教授提出了一个令人毛骨悚然的问题,与现实世界中的任何事情相比都毫无意义,要么是这个问题过于简化,以至于失去了原始问题的意义。同意,特别是因为他们在OP中不断发布60秒的时间戳。