2017-08-28 20 views
0

我有一個包含大量用戶日期時間記錄的表(timbrature),我只舍入23:31和23:59到第二天00:00之間的值。 我想出了這個查詢與網絡的幫助:在給定的條件下舍入所有日期時間記錄

DATAO是日期時間字段 iddip它的相對用戶

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 

如預期的查詢工作有關旋繞部的ID(以我省略了where子句檢查時間範圍的示例),但是我怎樣才能遍歷所有記錄?謝謝

+0

刪除第二個'WHERE IDDIP = 11',它會更新整個表 – cdsln

+0

即非標準SQL。你正在使用哪個DBMS? –

回答

0

你不需要臨時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 
+0

乾淨整潔,我學到了新東西,謝謝! –

相關問題