Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zmień przesunięcie strefy czasowej w wartości przesunięcia daty i godziny w programie SQL Server (T-SQL)

Możesz użyć SWITCHOFFSET() funkcja w SQL Server, aby zmienić przesunięcie strefy czasowej w przesunięciu daty i godziny wartość.

Funkcja przyjmuje dwa argumenty; przesunięcie daty i godziny(n) wartość (lub wyrażenie, które można przetłumaczyć na datetimeoffset(n) wartość) i nową strefę czasową.

Przykład

Oto przykład do zademonstrowania.

DECLARE @dto datetimeoffset = '2020-12-20 17:33:59.8900000 +02:00';
SELECT
  @dto AS [Original],
  SWITCHOFFSET(@dto, '+04:00') AS [Modified];

Wynik (przy użyciu wyjścia pionowego):

Original | 2020-12-20 17:33:59.8900000 +02:00
Modified | 2020-12-20 19:33:59.8900000 +04:00

Zauważ, że przesunięcie strefy czasowej jest określone jako ciąg. To dlatego, że dostarczyłem to w godzinach.

W przypadku określenia w godzinach przesunięcie strefy czasowej musi mieć format [+|-]TZH:TZM i być określone jako ciąg (ujęty w pojedynczy cudzysłów).

Użyj minut jako przesunięcia strefy czasowej

Alternatywnie można określić przesunięcie strefy czasowej w minutach. Robiąc to, musisz podać ją jako liczbę całkowitą.

DECLARE @dto datetimeoffset = '2020-12-20 17:33:59.8900000 +02:00';
SELECT
  @dto AS [Original],
  SWITCHOFFSET(@dto, 240) AS [Modified];

Wynik (przy użyciu wyjścia pionowego):

Original | 2020-12-20 17:33:59.8900000 +02:00
Modified | 2020-12-20 19:33:59.8900000 +04:00

Przykład bazy danych

Oto przykład użycia SWITCHOFFSET() na wartości z kolumny w tabeli bazy danych.

CREATE TABLE Test 
  (
      Col1 datetimeoffset
  ); 
INSERT INTO Test   
VALUES ('1967-12-20 17:33:59.8900000 -07:00'); 
SELECT 
  Col1,
  SWITCHOFFSET(Col1, '-08:00') AS Modified
FROM Test;

Wynik (przy użyciu wyjścia pionowego):

Col1     | 1967-12-20 17:33:59.8900000 -07:00
Modified | 1967-12-20 16:33:59.8900000 -08:00

Wydajność przy użyciu wartości GETDATE()

Microsoft radzi, aby używać SWITCHOFFSET() z GETDATE() funkcja może powodować powolne działanie zapytania, ponieważ optymalizator zapytań nie może uzyskać dokładnych szacunków kardynalności dla data-godzina wartość.

Aby rozwiązać ten problem, użyj OPTION (RECOMPILE) wskazówka zapytania. Zmusza to optymalizator kwerend do ponownej kompilacji planu kwerend przy następnym wykonaniu tego samego kwerendy.

Nie znasz przesunięcia strefy czasowej?

Jeśli nie znasz przesunięcia strefy czasowej do użycia, oto jak uzyskać listę obsługiwanych stref czasowych w SQL Server.

Jedną rzeczą, o której musisz pamiętać, jest czas letni. Wiele krajów/regionów ma swoje własne zasady dotyczące obserwowania czasu letniego (a niektóre w ogóle go nie przestrzegają). Może to powodować różnego rodzaju problemy, gdy próbujesz ustalić, czy uwzględnić czas letni w przesunięciach stref czasowych.

Na szczęście SQL Server wymyślił sposób na poradzenie sobie z tym. SQL Server 2016 wprowadził AT TIME ZONE klauzula. Ta klauzula umożliwia określenie nazwy strefy czasowej, a nie samego przesunięcia strefy czasowej. Dlatego możesz po prostu użyć „US Mountain Standard Time” lub „India Standard Time” lub innej strefy czasowej, która ma zastosowanie.

Zobacz Konwertowanie daty na inną strefę czasową, aby zobaczyć przykłady, jak to zrobić.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw wyniki procedury składowanej do tabeli tymczasowej

  2. Jak zmniejszyć rozmiar pliku danych w SQL Server (T-SQL)

  3. Po usunięciu kaskady dla tabeli samoodnoszącej się

  4. Polecenie SQL INSERT działa, ale dane nie pojawiają się w tabeli

  5. Jak usunąć wszystkie klucze podstawowe ze wszystkich tabel w bazie danych SQL Server — część samouczka SQL Server / TSQL 65