仅更新DATETIME列中的TZoffset



我有一组日期,如2023-11-30 23:59:59.00000000+00:00。我只想将时区偏移量从+000:00更新到+0.01:00。如果这让事情变得更容易的话,所有的时间都是23:59:59.00000000,只有日期不同。

我试过这个:

UPDATE Table SET Date = DATEADD(DAY, DATEDIFF(DAY, 0, Date), '2023-11-30 23:59:59.0000000 +01:00')

但它的工作精度只有几秒钟,没有毫秒、纳秒和tzoffset。当我尝试时,我遇到了这个错误:

从字符串转换日期和/或时间时转换失败。

似乎您想要TODATETIMEOFFSET:

DECLARE @YourValue datetimeoffset(7) = '2023-11-30 23:59:59.0000000 +00:00';
SELECT TODATETIMEOFFSET(@YourValue,'+01:00');

这将返回2023-11-30 23:59:59.0000000 +01:00。这之所以有效,是因为它首先获取datetimeoffset值并(隐式(将其转换为datetime2,从而截断偏移值,然后将新偏移添加到该值;从而不改变实际时间并且仅仅改变偏移。

如果你说你实际上改变了值,使得日期和时间随着偏移量而改变,那么你想要SWITCHOFFSET:

DECLARE @YourValue datetimeoffset(7) = '2023-11-30 23:59:59.0000000 +00:00';
SELECT SWITCHOFFSET(@YourValue,'+01:00');

这将返回2023-12-01 00:59:59.0000000 +01:00

最新更新