対象者:Azure SQL Database
Microsoft 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 列と同じです。
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;