SET タイムゾーン(Transact-SQL)

対象者:Azure SQL DatabaseMicrosoft FabricにおけるSQLデータベース

SET TIME ZONE Transact-SQL(T-SQL)文は、Azure SQL Databaseでタイムゾーン値を設定し、Microsoft FabricでSQLデータベースを設定するために使われます。

Note

SET TIME ZONESQL ServerやAzure SQL Managed Instanceではサポートされていません。

SET TIME ZONE データベースやインスタンスレベルのタイムゾーン値を上書きします。 タイムゾーンの値はsys.time_zone_infoシステムビューの name 列と同じです。

Transact-SQL 構文表記規則

Syntax

SET TIME ZONE { 'time_zone_value' | 'LOCAL' }
[ ; ]

引数

{ 'time_zone_value' |'ローカル'}

タイムゾーンの価値を指定します。 time_zone_value は nvarchar(128)で、デフォルトは LOCALです。

LOCALが指定されている場合、セッションの現在のデフォルトタイムゾーン値は元のセッションのタイムゾーン値に設定され、これはデータベースのスコープオプションまたはインスタンスのデフォルトのいずれかです。

インストールされたタイムゾーンのリストが sys.time_zone_info システムビューで公開されます。

注釈

SET TIME ZONEがT-SQLモジュールまたは動的SQLバッチで使用されている場合、その変更はモジュールまたは動的SQLバッチの実行範囲にのみ適用されます。 モジュールまたは動的SQLバッチ実行が完了すると、セッションタイムゾーンの設定はモジュールまたは動的SQLバッチ実行前のタイムゾーン値に戻ります。

Permissions

パブリック固定データベース ロールのメンバーシップが必要です。

Examples

この記事のコードサンプルは、Azure Data SQL Samples Repository GitHub repositoryからダウンロードできるAdventureWorks2025またはAdventureWorksDW2025サンプルデータベースを使用しています。

A. 現在のタイムゾーン設定を見る

以下のクエリはサーバー名、データベース名、製品バージョンを返します。

SELECT @@servername AS ServerName,
       DB_NAME() AS DatabaseName,
       SERVERPROPERTY('ResourceVersion') AS ProductVersion;

以下のクエリは、有効なタイムゾーンをUTCオフセット順に並べたものです。

SELECT *
FROM sys.time_zone_info
ORDER BY current_utc_offset;

以下のクエリは、 TIME_ZONE データベースのスコープ設定の現在の値を確認します。

SELECT *
FROM sys.database_scoped_configurations
WHERE name = 'TIME_ZONE';

もしデータベースレベルでタイムゾーンが設定されていなければ、デフォルトでインスタンスのタイムゾーンになります。 インスタンスタイムゾーンの設定はプラットフォームによって異なります:

Platform Description
ウィンドウズ 基盤となるOSのタイムゾーンです。
Linux SQL Serverプロセスのタイムゾーンで、TZ環境変数を使って設定できます。
Azure SQL Database SQLインスタンスのタイムゾーンは、常にUTCで、今日は変更できません。
Azure SQL Managed Instance SQLインスタンスのタイムゾーンはデフォルトUTCであり、インスタンス作成時に今日のみ変更可能です。

B. タイムゾーンをデータベースレベルで設定してください

以下の例では、データベースのスコープタイムゾーンをニュージーランド標準時に設定し、影響を受ける機能をレビューします。

ALTER DATABASE SCOPED CONFIGURATION SET TIME_ZONE = 'New Zealand Standard Time';
GO

SELECT CURRENT_TIMEZONE() AS CurrentTimeZone,
       CURRENT_TIMEZONE_ID() AS CurrentTimeZoneId,
       SYSDATETIMEOFFSET() AS CurrentDateTimeOffset,
       SYSDATETIME() AS CurrentLocalDateTime2,
       GETDATE() AS CurrentLocalDateTime3,
       CURRENT_TIMESTAMP AS CurrentLocalDateTime4;

C. データベースのスコープタイムゾーンをデフォルトにリセットする

以下の例では、データベースのスコープタイムゾーンを LOCALに戻し、影響を受けた関数をレビューします。

ALTER DATABASE SCOPED CONFIGURATION SET TIME_ZONE = LOCAL;
GO

SELECT CURRENT_TIMEZONE() AS CurrentTimeZone,
       CURRENT_TIMEZONE_ID() AS CurrentTimeZoneId,
       SYSDATETIMEOFFSET() AS CurrentDateTimeOffset,
       SYSDATETIME() AS CurrentLocalDateTime2,
       GETDATE() AS CurrentLocalDateTime,
       CURRENT_TIMESTAMP AS CurrentLocalDateTime2;

D. セッションレベルでタイムゾーンを設定します

以下の例では、セッションタイムゾーンを太平洋標準時に設定し、次にインド標準時に変更し、各変更後に影響を受けた機能をレビューします。

SET TIME ZONE 'Pacific Standard Time';

SELECT CURRENT_TIMEZONE() AS CurrentTimeZone, CURRENT_TIMEZONE_ID() AS CurrentTimeZoneId,
       SYSDATETIMEOFFSET() AS CurrentDateTimeOffset, SYSDATETIME() AS CurrentLocalDateTime2,
       GETDATE() AS CurrentLocalDateTime3, CURRENT_TIMESTAMP AS CurrentLocalDateTime4;
GO

SET TIME ZONE 'India Standard Time';

SELECT CURRENT_TIMEZONE() AS CurrentTimeZone, CURRENT_TIMEZONE_ID() AS CurrentTimeZoneId,
       SYSDATETIMEOFFSET() AS CurrentDateTimeOffset, SYSDATETIME() AS CurrentLocalDateTime2,
       GETDATE() AS CurrentLocalDateTime3, CURRENT_TIMESTAMP AS CurrentLocalDateTime4;

E. セッションタイムゾーンをデフォルトにリセットしてください

以下の例では、セッションをインスタンスまたはプラットフォームのデフォルトのタイムゾーンにリセットします。

SET TIME ZONE local;
GO

SELECT CURRENT_TIMEZONE() AS CurrentTimeZone,
       CURRENT_TIMEZONE_ID() AS CurrentTimeZoneId,
       SYSDATETIMEOFFSET() AS CurrentDateTimeOffset,
       SYSDATETIME() AS CurrentLocalDateTime2,
       GETDATE() AS CurrentLocalDateTime3,
       CURRENT_TIMESTAMP AS CurrentLocalDateTime4;

F. システムビューは常にインスタンスタイムゾーンを返します

時間値を含むシステムビューは、セッションやデータベースのタイムゾーンに関係なく、常にインスタンスのタイムゾーンを返します。

SELECT *
FROM sys.dm_exec_sessions;

SELECT *
FROM sys.dm_exec_query_stats;

SELECT *
FROM sys.objects;