Microsoft представи CURRENT_TIMEZONE()
функция в SQL Server 2019 за връщане на часовата зона на сървъра.
По-конкретно, тази функция „връща името на часовата зона, наблюдавана от сървър или екземпляр“.
Пример
Ето пример за демонстрация.
SELECT CURRENT_TIMEZONE();
Резултат:
(UTC) Coordinated Universal Time
В този случай часовата зона на моя екземпляр на SQL Server е UTC.
Мога да видя това, когато стартирам функции като SYSDATETIMEOFFSET()
.
SELECT SYSDATETIMEOFFSET();
Резултат:
2020-04-01 00:14:44.0470785 +00:00
UTC има изместване на часовата зона от +00:00 (без изместване) и това се отразява, когато върна датата и часа на системата.
По-ранни версии на SQL Server
Ако стартирам CURRENT_TIMEZONE()
срещу моя екземпляр на SQL Server 2017, ето какво получавам.
SELECT CURRENT_TIMEZONE();
Резултат:
Msg 195, Level 15, State 10, Line 1 'CURRENT_TIMEZONE' is not a recognized built-in function name.
Дори изтеглих най-новия Docker контейнер със SQL Server 2017 за Linux, за да проверя това, но все още получавам тази грешка.
Проверих и други инсталации на SQL Server 2017, но със същия резултат.
В секцията за коментари на своята онлайн документация за тази функция, Microsoft намеква, че CURRENT_TIMEZONE()
ще бъде пренесен към по-ранни версии на SQL Server, но изглежда, че това не се е случило към момента на писане.
Междувременно можете да опитате следния код.
DECLARE @TimeZone VARCHAR(50)
EXEC MASTER.dbo.xp_regread 'HKEY_LOCAL_MACHINE',
'SYSTEM\CurrentControlSet\Control\TimeZoneInformation',
'TimeZoneKeyName',@TimeZone OUT
SELECT @TimeZone
Резултат:
UTC
Пуснах го на същия екземпляр на SQL Server 2017, който не поддържа CURRENT_TIMEZONE()
, и работи добре.
Очевидно вашият резултат ще зависи от това къде се намира вашият сървър (или поне за коя часова зона е конфигуриран). Ето какво получавам, ако изпълня това изявление на друг сървър:
W. Europe Standard Time
SQL Server също има системен изглед, който ви позволява да върнете списък с поддържани часови зони, които можете да използвате за кръстосана проверка на резултатите тук.