2014-10-08 73 views
0

我有一个表3列: ID(INT,PK) 时间(DATETIMEOFFSET) 储值(INT)TSQL更新日期从今天DATETIMEOFFSET列

我只需要更新的时间日期根据已存储在datetimeoffset(但不更改时间或时区信息)的时区,每行都有。例如,如果存储的值为:2014-10-08 08:25:46.0​​000000 +04:00,并且该时区的今天为:2014-10-20,则该值应为:2014-10-20 08:25:46.0​​000000 + 04:00但如果今天仍然是2014-10-19,那么应该设置为:2014-10-19 08:25:46.0​​000000 +04:00。

我该如何在TSQL中做到这一点?

UPDATE: 可能凌乱和不完整的答案根据时区不正确地更新每一行,但基于以下问题的答案:

DECLARE @date DATETIMEOFFSET = SYSDATETIMEOFFSET() 
DECLARE @date2 datetimeoffset(4) = '12-10-25 12:32:10.1237 +01:0' 
CONVERT(DATETIMEOFFSET, DATETIMEOFFSETFROMPARTS(datepart(yyyy, @date), datepart(mm, @date), datepart(dd, @date), datepart(HH, @date2), datepart(MI, @date2), datepart(SS, @date2), datepart(MILLISECOND, @date2), CAST((FLOOR(DATEPART(TZ, @date2))/60) AS VARCHAR(10)), CAST((DATEPART(TZ,@date2)%60) AS VARCHAR(10)), 3)) 

回答

0
DECLARE @date DATETIMEOFFSET = '2013-01-31 10:02:12 +02:00' 

select @date,CONVERT(DATETIMEOFFSET, DATEADD(day, 18, @date)) 

请上面的代码检查。

+0

这不处理行更新到今天的日期。可能计算现有日期和今天之间的差异然后做这个?上面写了一个不完整的答案。如果你可以在这个方向上改进/修改,那就太棒了! – user3546827 2014-10-08 23:02:25

0

请试试!

dateadd(dd,datediff(dd,timecolumn,getdate()),timecolumn)