Обновите только TZoffset в столбце ДАТА-ВРЕМЯ

#sql-server #datetime #timezone

Вопрос:

У меня есть набор дат, таких как 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. У меня есть эта ошибка, когда я попробовал это:

Не удалось выполнить преобразование при преобразовании даты и/или времени из символьной строки.

Ответ №1:

Похоже, ты хочешь 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 .

Комментарии:

1. Большое спасибо! Я суперноб, поэтому я использовал UPDATE Table SET Date = TODATETIMEOFFSET (Date, ' 01:00') , но это все равно сработало! 🙂