sql >> データベース >  >> RDS >> Sqlserver

SQL Server(T-SQL)でサーバーの現在のタイムゾーンを取得する

    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には、サポートされているタイムゾーンのリストを返すことができるシステムビューもあります。これを使用して、ここで結果をクロスチェックできます。


    1. Oracleで非稼働時間をなくす方法

    2. SQLServerでのDROPTABLEステートメントについて

    3. ClusterControlを使用したMySQLおよびMariaDBのPCIコンプライアンス

    4. Laravel-5'LIKE'相当(Eloquent)