Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Променете отместването на часовата зона на стойността на дата и отместване в SQL Server (T-SQL)

Можете да използвате SWITCHOFFSET() функция в SQL Server за промяна на отместването на часовата зона на datetimeoffset стойност.

Функцията приема два аргумента; a datetimeoffset(n) стойност (или израз, който може да бъде разрешен до datetimeoffset(n) стойност) и новата часова зона.

Пример

Ето пример за демонстрация.

ДЕКЛАРИРАЙТЕ @dto datetimeoffset ='2020-12-20 17:33:59.8900000 +02:00';ИЗБЕРЕТЕ @dto КАТО [Оригинал], SWITCHOFFSET(@dto, '+04:00') КАТО [ Променено]; 

Резултат (с помощта на вертикален изход):

Оригинал | 20.12.2020 17:33:59.8900000 +02:00 Променено | 20.12.2020 19:33:59.8900000 +04:00

Имайте предвид, че изместването на часовата зона е посочено като низ. Това е така, защото го предоставих за часове.

Когато е посочено в часове, изместването на часовата зона трябва да използва формата [+|-]TZH:TZM и да бъде посочено като низ (ограден в единични кавички).

Използвайте минутите като отместване на часовата зона

Като алтернатива можете да посочите изместването на часовата зона в минути. Когато правите това, трябва да го посочите като цяло число.

DECLARE @dto datetimeoffset ='2020-12-20 17:33:59.8900000 +02:00';ИЗБЕРЕТЕ @dto КАТО [Оригинал], SWITCHOFFSET(@dto, 240) КАТО [Променено]; 

Резултат (с помощта на вертикален изход):

Оригинал | 20.12.2020 17:33:59.8900000 +02:00 Променено | 20.12.2020 19:33:59.8900000 +04:00

Пример за база данни

Ето пример за използване на SWITCHOFFSET() върху стойността от колона в таблица на база данни.

CREATE TABLE Test ( Col1 datetimeoffset ); INSERT INTO Test VALUES ('1967-12-20 17:33:59.8900000 -07:00'); ИЗБЕРЕТЕ Col1, SWITCHOFFSET(Col1, '-08:00') КАТО Променено ОТ тест; 

Резултат (с помощта на вертикален изход):

<пред>Кол1 | 1967-12-20 17:33:59.8900000 -07:00 Променено | 1967-12-20 16:33:59.8900000 -08:00

Ефективност при използване на стойност GETDATE()

Microsoft съветва да използвате SWITCHOFFSET() с GETDATE() функцията може да доведе до бавно изпълнение на заявката, тъй като оптимизаторът на заявки не може да получи точни оценки за кардиналите за дата и час стойност.

За да разрешите този проблем, използвайте OPTION (RECOMPILE) намек за заявка. Това принуждава оптимизатора на заявки да прекомпилира план за заявка следващия път, когато същата заявка бъде изпълнена.

Не знаете изместването на часовата зона?

Ако не знаете изместването на часовата зона, което да използвате, ето как да получите списък с поддържани часови зони в SQL Server.

Едно нещо, за което трябва да имате предвид, е лятното часово време. Много държави/региони имат свои специфични правила за спазване на лятното часово време (а някои изобщо не го спазват). Това може да причини всякакви проблеми, когато се опитвате да решите дали да вземете предвид лятното часово време в изместването на часовата си зона.

За щастие SQL Server измисли начин да се справи с това. SQL Server 2016 въведе AT TIME ZONE клауза. Тази клауза ви позволява да посочите името на часова зона, а не самото изместване на часовата зона. Следователно можете просто да използвате „Стандартно време в планината на САЩ“ или „Стандартно време в Индия“ или каквато часова зона е приложима.

Вижте Преобразуване на дата в друга часова зона за примери как да направите това.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Отстраняване на проблеми с репликацията на SQL сървър

  2. Как да увеличите допустимия размер на прикачените файлове при изпращане на имейл в SQL Server (T-SQL)

  3. Как виждате ЦЕЛИЯ текст от ntext или nvarchar(max) в SSMS?

  4. Наблюдавайте бази данни и екземпляри чрез Монитор на активността | Отстраняване на проблеми с производителността на SQL Server -2

  5. Анализ на MS SQL Server за тези, които го виждат за първи път