MicrosoftはCURRENT_TIMEZONE()
を導入しました サーバーのタイムゾーンを返すためのSQLServer2019の関数。
具体的には、この関数は「サーバーまたはインスタンスによって監視されるタイムゾーンの名前を返します」。
例
実例を示します。
SELECT CURRENT_TIMEZONE();
結果:
(UTC) Coordinated Universal Time
この場合、SQLServerのインスタンスのタイムゾーンはUTCです。
SYSDATETIMEOFFSET()
のような関数を実行するとこれがわかります 。
SELECT SYSDATETIMEOFFSET();
結果:
2020-04-01 00:14:44.0470785 +00:00
UTCのタイムゾーンオフセットは+00:00(オフセットなし)であり、これはシステムの日付と時刻を返すときに反映されます。
以前のバージョンのSQLServer
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.
これを確認するために、SQL Server 2017 for Linuxで最新のDockerコンテナをダウンロードしましたが、それでもこのエラーが発生します。
他のSQLServer2017のインストールも確認しましたが、同じ結果になりました。
この関数のオンラインドキュメントのコメントセクションで、MicrosoftはCURRENT_TIMEZONE()
をほのめかしています。 以前のバージョンのSQLServerに移植されますが、この記事の執筆時点ではこれは行われていないようです。
それまでの間、次のコードを試すことができます。
DECLARE @TimeZone VARCHAR(50)
EXEC MASTER.dbo.xp_regread 'HKEY_LOCAL_MACHINE',
'SYSTEM\CurrentControlSet\Control\TimeZoneInformation',
'TimeZoneKeyName',@TimeZone OUT
SELECT @TimeZone
結果:
UTC
CURRENT_TIMEZONE()
をサポートしていないSQLServer2017の同じインスタンスで実行しました 、そしてそれはうまくいきました。
明らかに、結果はサーバーが配置されている場所(または少なくともサーバーが構成されているタイムゾーン)によって異なります。このステートメントを別のサーバーで実行すると、次のようになります。
W. Europe Standard Time
SQL Serverには、サポートされているタイムゾーンのリストを返すことができるシステムビューもあります。これを使用して、ここで結果をクロスチェックできます。