AT TIME ZONE (Transact-SQL)AT TIME ZONE (Transact-SQL)

適用対象: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

inputdate を対応する datetimeoffset 値に変換先のタイム ゾーンで変換します。Converts an inputdate to the corresponding datetimeoffset value in the target time zone. inputdate がオフセット情報なしで提供されると、この関数は、inputdate が変換先のタイム ゾーン内であるものと想定して、タイム ゾーンのオフセットを適用します。When inputdate is provided without offset information, the function applies the offset of the time zone assuming that inputdate is in the target time zone. inputdatedatetimeoffset 値として与えられる場合、AT TIME ZONE 句はタイム ゾーン変換規則を利用して変換先のタイム ゾーンにそれを変換します。If inputdate is provided as a datetimeoffset value, then AT TIME ZONE clause converts it into the target time zone using the time zone conversion rules.

AT TIME ZONE の実装は、タイム ゾーン間で datetime 値を変換する Windows メカニズムに依存します。AT TIME ZONE implementation relies on a Windows mechanism to convert datetime values across time zones.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

inputdate AT TIME ZONE timezone  

引数Arguments

inputdateinputdate
smalldatetimedatetimedatetime2datetimeoffset 値に解決できる式です。Is an expression that can be resolved to a smalldatetime, datetime, datetime2, or datetimeoffset value.

timezonetimezone
変換先のタイム ゾーンの名前。Name of the destination time zone. SQL ServerSQL Server は Windows レジストリに格納されているタイム ゾーンに依存します。relies on time zones that are stored in the Windows Registry. コンピューターにインストールされているタイム ゾーンは、次のレジストリ ハイブに格納されています:KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time ZonesTime zones installed on the computer are stored in the following registry hive: KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones. インストールされているタイム ゾーンの一覧は sys.time_zone_info (Transact-SQL) ビューでも閲覧できます。A list of installed time zones is also exposed through the sys.time_zone_info (Transact-SQL) view.

戻り値の型Return Types

datetimeoffset のデータ型を返します。Returns the data type of datetimeoffset.

戻り値Return Value

変換先のタイム ゾーンの datetimeoffset 値。The datetimeoffset value in the target time zone.

RemarksRemarks

AT TIME ZONE は、データ型 smalldatetimedatetimedatetime2 の入力値が DST 変更の影響を受ける時間間隔に分類されるとき、特別な入力値変換ルールを適用します。AT TIME ZONE applies specific rules for converting input values in smalldatetime, datetime, and datetime2 data types that fall into an interval affected by a DST change:

  • 時計が進んでいると、現地時刻には時計調整の継続時間と等しい隔たりが存在します。When the clock's set ahead, there's a gap in local time equal to the duration of the clock adjustment. この継続時間は通常は 1 時間ですが、タイム ゾーンによっては 30 分または 45 分の場合もあります。This duration is usually 1 hour, but it can be 30 or 45 minutes, depending on time zone. DST 変更の "" で、この隔たり内にある時点はオフセットで変換されます。Points in time that are in this gap are converted with the offset after DST change.

    /*  
        Moving to DST in "Central European Standard Time" zone: 
        offset changes from +01:00 -> +02:00   
        Change occurred on March 29th, 2015 at 02:00:00.   
        Adjusted local time became 2015-03-29 03:00:00.  
    */  
    
    --Time before DST change has standard time offset (+01:00)
    SELECT CONVERT(datetime2(0), '2015-03-29T01:01:00', 126)     
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-03-29 01:01:00 +01:00   
    
    /*
      Adjusted time from the "gap interval" (between 02:00 and 03:00)
      is moved 1 hour ahead and presented with the summer time offset
      (after the DST change) 
    */
    SELECT CONVERT(datetime2(0), '2015-03-29T02:01:00', 126)   
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-03-29 03:01:00 +02:00
    
    --Time after 03:00 is presented with the summer time offset (+02:00)
    SELECT CONVERT(datetime2(0), '2015-03-29T03:01:00', 126)   
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-03-29 03:01:00 +02:00  
    
    
  • 時計が遅れていると、現地時刻の 2 時間が重なり、1 時間になります。When the clock is set back, then 2 hours of local time are overlapped onto one hour. その場合、時計変更のに、重なる時間間隔に属する時点がオフセットで表されます。In that case, points in time that belong to the overlapped interval are presented with the offset before the clock change:

    /*  
        Moving back from DST to standard time in 
        "Central European Standard Time" zone: 
        offset changes from +02:00 -> +01:00.  
        Change occurred on October 25th, 2015 at 03:00:00.   
        Adjusted local time became 2015-10-25 02:00:00   
    */  
    
    --Time before the change has DST offset (+02:00)
    SELECT CONVERT(datetime2(0), '2015-10-25T01:01:00', 126)      
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-10-25 01:01:00 +02:00  
    
    /*
      Time from the "overlapped interval" is presented with standard time 
      offset (before the change)    
    */
    SELECT CONVERT(datetime2(0), '2015-10-25T02:00:00', 126)   
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-10-25 02:00:00 +02:00  
    
    
    --Time after 03:00 is regularly presented with the standard time offset (+01:00)    
    SELECT CONVERT(datetime2(0), '2015-10-25T03:01:00', 126)   
    AT TIME ZONE 'Central European Standard Time';  
    --Result: 2015-10-25 03:01:00 +01:00
    
    

一部の情報 (タイム ゾーン ルールなど) は SQL ServerSQL Server の外で保守管理され、時折変更されるため、AT TIME ZONE 関数は非決定的として分類されます。Since some information (such as timezone rules) is maintained outside of SQL ServerSQL Server and are subject to occasional change, the AT TIME ZONE function is classed as nondeterministic.

使用例Examples

A.A. オフセット情報なしで、変換先のタイム ゾーンのオフセットを datetime に追加するAdd target time zone offset to datetime without offset information

元の datetime 値が同じタイム ゾーンで与えられることがわかっているとき、タイム ゾーン ルールに基づいてオフセットを追加するには、AT TIME ZONE を使用します。Use AT TIME ZONE to add offset based on time zone rules when you know that the original datetime values are provided in the same time zone:

USE AdventureWorks2016;  
GO  
  
SELECT SalesOrderID, OrderDate,   
    OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST  
FROM Sales.SalesOrderHeader;  

B.B. 異なるタイム ゾーン間で値を変換するConvert values between different time zones

次の例では、異なるタイム ゾーン間で値を変更します。The following example converts values between different time zones:

USE AdventureWorks2016;  
GO  
  
SELECT SalesOrderID, OrderDate,   
    OrderDate AT TIME ZONE 'Pacific Standard Time' AS OrderDate_TimeZonePST,  
    OrderDate AT TIME ZONE 'Central European Standard Time' AS OrderDate_TimeZoneCET  
FROM Sales.SalesOrderHeader;  

C.C. ローカル タイム ゾーンでテンポラル テーブルにクエリを実行するQuery Temporal Tables using local time zone

次の例では、テンポラル テーブルからデータを選択します。The following example selects data from a temporal table.

USE AdventureWorks2016;  
GO  
  
DECLARE @ASOF datetimeoffset;  
SET @ASOF = DATEADD (month, -1, GETDATE()) AT TIME ZONE 'UTC';  
  
-- Query state of the table a month ago projecting period   
-- columns as Pacific Standard Time  
SELECT BusinessEntityID, PersonType, NameStyle, Title,   
    FirstName, MiddleName,  
    ValidFrom AT TIME ZONE 'Pacific Standard Time' 
FROM  Person.Person_Temporal  
FOR SYSTEM_TIME AS OF @ASOF;  

参照See Also

日付型と時刻型 Date and Time Types
日付と時刻のデータ型および関数 (Transact-SQL)Date and Time Data Types and Functions (Transact-SQL)