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

Uzyskaj aktualną strefę czasową serwera w programie SQL Server (T-SQL)

Microsoft wprowadził CURRENT_TIMEZONE() funkcja w SQL Server 2019 do zwracania strefy czasowej serwera.

Dokładniej, ta funkcja „zwraca nazwę strefy czasowej obserwowanej przez serwer lub instancję”.

Przykład

Oto przykład do zademonstrowania.

SELECT CURRENT_TIMEZONE();

Wynik:

(UTC) Coordinated Universal Time

W tym przypadku strefa czasowa mojej instancji SQL Server to UTC.

Widzę to, gdy uruchamiam funkcje takie jak SYSDATETIMEOFFSET() .

SELECT SYSDATETIMEOFFSET();

Wynik:

2020-04-01 00:14:44.0470785 +00:00

UTC ma przesunięcie strefy czasowej +00:00 (bez przesunięcia), co jest odzwierciedlane, gdy zwracam datę i godzinę systemową.

Wcześniejsze wersje SQL Server

Jeśli uruchomię CURRENT_TIMEZONE() w stosunku do mojej instancji SQL Server 2017, oto co otrzymuję.

SELECT CURRENT_TIMEZONE();

Wynik:

Msg 195, Level 15, State 10, Line 1
'CURRENT_TIMEZONE' is not a recognized built-in function name.

Pobrałem nawet najnowszy kontener Docker z SQL Server 2017 dla systemu Linux, aby to sprawdzić, ale nadal pojawia się ten błąd.

Sprawdziłem również inne instalacje SQL Server 2017, ale z takim samym wynikiem.

W sekcji komentarzy dokumentacji online tej funkcji firma Microsoft zasugerowała, że ​​CURRENT_TIMEZONE() zostanie przeniesiony do wcześniejszych wersji SQL Server, ale wydaje się, że nie miało to miejsca w chwili pisania tego tekstu.

W międzyczasie możesz wypróbować następujący kod.

DECLARE @TimeZone VARCHAR(50)
EXEC MASTER.dbo.xp_regread 'HKEY_LOCAL_MACHINE',
'SYSTEM\CurrentControlSet\Control\TimeZoneInformation',
'TimeZoneKeyName',@TimeZone OUT
SELECT @TimeZone

Wynik:

UTC

Uruchomiłem to na tej samej instancji SQL Server 2017, która nie obsługuje CURRENT_TIMEZONE() , i wszystko działało dobrze.

Oczywiście wynik będzie zależał od lokalizacji serwera (lub przynajmniej strefy czasowej, dla której został skonfigurowany). Oto, co otrzymam, jeśli uruchomię tę instrukcję na innym serwerze:

W. Europe Standard Time

SQL Server ma również widok systemowy, który umożliwia zwrócenie listy obsługiwanych stref czasowych, których można użyć do sprawdzenia wyników tutaj.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Procedura składowana wywołań SQL dla każdego wiersza bez użycia kursora

  2. Implementacja wyszukiwania pełnotekstowego w SQL Server 2016 dla początkujących

  3. CONVERT() vs TRY_CONVERT w SQL Server:jaka jest różnica?

  4. Jak przekonwertować bigint (sygnaturę czasową UNIX) na datę i godzinę w programie SQL Server?

  5. Zwróć uprawnienia kolumny z serwera połączonego w programie SQL Server (przykłady T-SQL)