仅更新 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
.
我有一组日期,例如 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
.