在给定条件下舍入所有日期时间记录

时间:2017-08-28 16:29:59

标签: sql datetime rounding

我有一个表(timbrature),其中包含很多用户的日期时间记录,我只会在第二天的23:31到23:59到00:00之间对该字段进行舍入。 我在网络的帮助下想出了这个查询:

datao是日期时间字段 iddip它是相对用户的id

declare @dt datetime
set @dt = (select DATAO from timbrature where IDDIP=11)
update timbrature set datao= (select dateadd(hour, datediff(hour, 0, dateadd(mi, 30, @dt)), 0)) where IDDIP=11

查询按预期工作有关舍入部分(在示例中我省略了where子句检查时间范围),但是如何循环遍历所有记录?感谢

1 个答案:

答案 0 :(得分:0)

您不需要temp var,只需在where子句中使用datepart,直接从DATAO列获取时间。

declare @timbrature table (DATAO datetime, IDDIP int)
insert into @timbrature
select '2017-01-01 04:00:00.000',1 union
select '2017-01-01 23:30:00.000',2 union
select '2017-01-01 23:31:00.000',3 union
select '2017-01-01 23:59:00.000',4 union
select '2017-01-01 00:00:00.000',5

update @timbrature 
set DATAO= dateadd(hour, datediff(hour, 0, dateadd(mi, 30, DATAO)), 0) 
from @timbrature 
where datepart(hour,DATAO)=23 and datepart(minute,DATAO)>30

select * from @timbrature order by IDDIP

结果将是

DATAO                   IDDIP
----------------------- -----------
2017-01-01 04:00:00.000 1
2017-01-01 23:30:00.000 2
2017-01-02 00:00:00.000 3
2017-01-02 00:00:00.000 4
2017-01-01 00:00:00.000 5