仅更新 DATETIME 列中的 TZoffset

Update Only TZoffset in DATETIME column

我有一组日期,例如 2023-11-30 23:59:59.0000000 +00:00。我只想更新从 +00:00+01:00 的时区偏移量。 如果它使事情变得更容易,所有时间都是 23:59:59.0000000 并且只有日期不同。

我试过这个:

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

但它只能精确到秒,没有毫秒、纳秒和 tzoffset。当我尝试这样做时,我遇到了这个错误:

Conversion failed when converting date and/or time from character string.

好像你想要TODATETIMEOFFSET:

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

SELECT TODATETIMEOFFSET(@YourValue,'+01:00');

这个returns2023-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');

这个returns2023-12-01 00:59:59.0000000 +01:00.