datetimeoffset (Transact-SQL)datetimeoffset (Transact-SQL)

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

タイム ゾーンを認識する 24 時間形式の時刻と組み合わせた日付を定義します。Defines a date that is combined with a time of a day that has time zone awareness and is based on a 24-hour clock.

datetimeoffset の説明datetimeoffset description

プロパティProperty [値]Value
構文Syntax datetimeoffset [ (fractional seconds precision) ]datetimeoffset [ (fractional seconds precision) ]
使用方法Usage DECLARE @MyDatetimeoffset datetimeoffset(7)DECLARE @MyDatetimeoffset datetimeoffset(7)

CREATE TABLE Table1 ( Column1 datetimeoffset(7) )CREATE TABLE Table1 ( Column1 datetimeoffset(7) )
既定の文字列リテラル形式 (下位クライアント用)Default string literal formats (used for down-level client) YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]

詳細については、後述の「下位クライアントの下位互換性」セクションを参照してください。For more information, see the "Backward Compatibility for Down-level Clients" section that follows.
日付範囲Date range 0001-01-01 ~ 31.12.990001-01-01 through 9999-12-31

1 月 1 日 1 CE ~12 月 31 日 9999 CEJanuary 1, 1 CE through December 31, 9999 CE
時間の範囲Time range 00:00:00 から 23:59:59.999999900:00:00 through 23:59:59.9999999
タイム ゾーンのオフセット範囲Time zone offset range -14:00 ~ +14:00-14:00 through +14:00
要素範囲Element ranges YYYY は、0001 ~ 9999 の年を表す 4 桁の数字です。YYYY is four digits, ranging from 0001 through 9999, that represent a year.

MM は、指定された年の 01 ~ 12 の月を表す 2 桁の数字です。MM is two digits, ranging from 01 to 12, that represent a month in the specified year.

DD は、指定された月の (月に応じて) 01 ~ 31 の日を表す 2 桁の数字です。DD is two digits, ranging from 01 to 31 depending on the month, that represent a day of the specified month.

hh は、00 ~ 23 の時を表す 2 桁の数字です。hh is two digits, ranging from 00 to 23, that represent the hour.

mm は、分を表す 00 から 59 の 2 桁の数字です。mm is two digits, ranging from 00 to 59, that represent the minute.

ss は、秒を表す 00 から 59 の 2 桁の数字です。ss is two digits, ranging from 00 to 59, that represent the second.

n* は、秒の有効桁数を表す 0 ~ 7 桁の数字です (0 ~ 9999999)。n* is zero to seven digits, ranging from 0 to 9999999, that represent the fractional seconds.

hh は、-14 から +14 までの 2 桁の数字です。hh is two digits that range from -14 to +14.

mm は、00 ~ 59 の 2 桁の数字です。mm is two digits that range from 00 to 59.
文字長Character length 26 文字 (YYYY-MM-DD hh:mm:ss {+|-}hh:mm) 以上、34 文字 (YYYY-MM-DD hh:mm:ss.nnnnnnn {+|-}hh:mm) 以下26 positions minimum (YYYY-MM-DD hh:mm:ss {+|-}hh:mm) to 34 maximum (YYYY-MM-DD hh:mm:ss.nnnnnnn {+|-}hh:mm)
有効桁数、小数点以下桁数Precision, scale 次の表を参照してください。See the table below.
ストレージ サイズStorage size 既定では 10 バイト固定 (秒部分の既定の有効桁数は 100 ns) です。10 bytes, fixed is the default with the default of 100ns fractional second precision.
精度Accuracy 100 ナノ秒100 nanoseconds
既定値Default value 1900-01-01 00:00:00 00:001900-01-01 00:00:00 00:00
カレンダーCalendar グレゴリオ暦Gregorian
ユーザー定義の 1 秒未満の秒の有効桁数User-defined fractional second precision はいYes
タイム ゾーン オフセットへの対応と保持Time zone offset aware and preservation はいYes
夏時間への対応Daylight saving aware いいえNo
指定した小数点以下桁数Specified scale 結果 (有効桁数、小数点以下桁数)Result (precision, scale) 列長 (バイト)Column length (bytes) 秒の小数部の有効桁数Fractional seconds precision
datetimeoffsetdatetimeoffset (34,7)(34,7) 1010 77
datetimeoffset(0)datetimeoffset(0) (26,0)(26,0) 88 0-20-2
datetimeoffset(1)datetimeoffset(1) (28,1)(28,1) 88 0-20-2
datetimeoffset(2)datetimeoffset(2) (29,2)(29,2) 88 0-20-2
datetimeoffset(3)datetimeoffset(3) (30,3)(30,3) 99 3-43-4
datetimeoffset(4)datetimeoffset(4) (31,4)(31,4) 99 3-43-4
datetimeoffset(5)datetimeoffset(5) (32,5)(32,5) 1010 5-75-7
datetimeoffset(6)datetimeoffset(6) (33,6)(33,6) 1010 5-75-7
datetimeoffset(7)datetimeoffset(7) (34,7)(34,7) 1010 5-75-7

datetimeoffset でサポートされる文字列リテラル形式Supported string literal formats for datetimeoffset

次の表は、datetimeoffset でサポートされている ISO 8601 文字列リテラル形式を一覧にしたものです。The following table lists the supported ISO 8601 string literal formats for datetimeoffset. datetimeoffset の日付部分と時刻部分に使用できるアルファベット、数値、区切りなし、時刻の各形式については、「date (Transact-SQL)」および「time (Transact-SQL)」をご覧ください。For information about alphabetical, numeric, unseparated and time formats for the date and time parts of datetimeoffset, see date (Transact-SQL) and time (Transact-SQL).

ISO 8601ISO 8601 [説明]Description
YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm]YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm] この 2 つの形式は、セッションのロケール設定である SET LANGUAGE および SET DATEFORMAT の影響を受けません。These two formats are not affected by the SET LANGUAGE and SET DATEFORMAT session locale settings. datetimeoffset 部分と datetime 部分の間にスペースを入れることはできません。Spaces are not allowed between the datetimeoffset and the datetime parts.
YYYY-MM-DDThh:mm:ss[.nnnnnnn]Z (UTC)YYYY-MM-DDThh:mm:ss[.nnnnnnn]Z (UTC) ISO 定義に基づくこの形式は、datetime 部分を協定世界時 (UTC) で指定する必要があることを示します。This format by ISO definition indicates the datetime portion should be expressed in Coordinated Universal Time (UTC). たとえば、1999-12-12 12:30:30.12345 -07:00 は 1999-12-12 19:30:30.12345Z と表す必要があります。For example, 1999-12-12 12:30:30.12345 -07:00 should be represented as 1999-12-12 19:30:30.12345Z.

タイム ゾーン オフセットTime zone offset

タイム ゾーン オフセットは、time または datetime 値の UTC を基準とした相対値を指定します。A time zone offset specifies the zone offset from UTC for a time or datetime value. タイム ゾーン オフセットは、[+|-] hh:mm として表すことができます。The time zone offset can be represented as [+|-] hh:mm:

  • hh は、タイム ゾーン オフセットの時間数を表す 00 から 14 までの 2 桁の数字です。hh is two digits that range from 00 to 14 and represent the number of hours in the time zone offset.
  • mm は、タイム ゾーン オフセットの付加的な分数を表す 00 から 59 までの 2 桁の数字です。mm is two digits, ranging from 00 to 59, that represent the number of additional minutes in the time zone offset.
  • タイム ゾーン オフセットでは、+ (正負号) または - (負符号) を必ず指定します。+ (plus) or - (minus) is the mandatory sign for a time zone offset. ローカル時刻を取得する際、UTC 時刻を基準としてタイム ゾーン オフセットを加算するか、減算するかを示します。This indicates whether the time zone offset is added or subtracted from the UTC time to obtain the local time. タイム ゾーン オフセットの有効範囲は -14:00 ~ +14:00 までです。The valid range of time zone offset is from -14:00 to +14:00.

タイム ゾーン オフセットの範囲は、XSD スキーマ定義の W3C XML 標準に準拠しており、SQL 2003 標準の定義 (12:59 ~ +14:00) とは若干異なります。The time zone offset range follows the W3C XML standard for XSD schema definition and is slightly different from the SQL 2003 standard definition, 12:59 to +14:00.

fractional seconds precision は、1 秒未満の桁数を指定するオプションのパラメーターです。The optional type parameter fractional seconds precision specifies the number of digits for the fractional part of the seconds. この値は、0 から 7 (100 ナノ秒) の整数で指定できます。This value can be an integer with 0 to 7 (100 nanoseconds). fractional seconds precision の既定値は 100ns (1 秒未満の桁数は 7 桁) です。The default fractional seconds precision is 100ns (seven digits for the fractional part of the seconds).

データベースに格納されたデータは、サーバーで UTC として処理、比較、並べ替え、およびインデックス化されます。The data is stored in the database and processed, compared, sorted, and indexed in the server as in UTC. タイム ゾーン オフセットは、データベースに保持され、必要に応じて取得できます。The time zone offset will be preserved in the database for retrieval.

datetime が DST 期間に該当する場合、指定したタイム ゾーン オフセットは、夏時間 (DST) が認識されて調整されるものと見なされます。The given time zone offset will be assumed to be daylight saving time (DST) aware and adjusted for any given datetime that is in the DST period.

datetime 型では、挿入、更新、算術演算、変換、代入などの操作時に、UTC とローカルの両方の datetime 値 (保持されたタイム ゾーン オフセットと変換後のタイム ゾーン オフセット) が検証されます。For datetimeoffset type, both UTC and local (to the persistent or converted time zone offset) datetime value will be validated during insert, update, arithmetic, convert, or assign operations. 保持されたタイム ゾーン オフセットまたは変換後のタイム ゾーン オフセットに対して、無効な UTC またはローカル datetime 値が検出された場合は、無効な値であることを示すエラーが生成されます。The detection of any invalid UTC or local (to the persistent or converted time zone offset) datetime value will raise an invalid value error. たとえば、9999-12-31 10:10:00 は UTC では有効ですが、タイム ゾーン オフセットを +13:50 に設定したローカル時間ではオーバーフローします。For example, 9999-12-31 10:10:00 is valid in UTC, but overflow in local time to the time zone offset +13:50.

ターゲットのタイム ゾーンの対応する datetimeoffset 値への date の変換については、「AT TIME ZONE (Transact-SQL)」をご覧ください。To convert a date to a corresponding datetimeoffset value in a target time zone, see AT TIME ZONE (Transact-SQL).

ANSI および ISO 8601 への準拠ANSI and ISO 8601 compliance

date および time のトピックの ANSI と ISO 8601 への準拠に関するセクションは、datetimeoffset にも当てはまります。The ANSI and ISO 8601 Compliance sections of the date and time topics apply to datetimeoffset.

下位クライアントの下位互換性Backward compatibility for down-level clients

一部の下位レベル クライアントは、timedatedatetime2datetimeoffset データ型をサポートしていません。Some down-level clients do not support the time, date, datetime2 and datetimeoffset data types. SQL ServerSQL Server の上位インスタンスと下位クライアントの間のデータ型マッピングを次の表に示します。The following table shows the type mapping between an up-level instance of SQL ServerSQL Server and down-level clients.

SQL ServerSQL Server のデータ型data type 下位クライアントに渡される既定の文字列リテラル形式Default string literal format passed to down-level client 下位 ODBCDown-level ODBC 下位 OLEDBDown-level OLEDB 下位 JDBCDown-level JDBC 下位 SQLCLIENTDown-level SQLCLIENT
timetime hh:mm:ss[.nnnnnnn]hh:mm:ss[.nnnnnnn] SQL_WVARCHAR または SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR または DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String または SqStringString or SqString
datedate YYYY-MM-DDYYYY-MM-DD SQL_WVARCHAR または SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR または DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String または SqStringString or SqString
datetime2datetime2 YYYY-MM-DD hh:mm:ss[.nnnnnnn]YYYY-MM-DD hh:mm:ss[.nnnnnnn] SQL_WVARCHAR または SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR または DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String または SqStringString or SqString
datetimeoffsetdatetimeoffset YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mmYYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm SQL_WVARCHAR または SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR または DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String または SqStringString or SqString

日付と時刻のデータ型の変換Converting date and time data

data データ型と time データ型に変換する場合、SQL ServerSQL Server で日付や時刻と認識できない値はすべて拒否されます。When you convert to date and time data types, SQL ServerSQL Server rejects all values it cannot recognize as dates or times. CAST 関数および CONVERT 関数で日付と時刻のデータを使用する方法については、「CAST および CONVERT (Transact-SQL)」をご覧ください。For information about using the CAST and CONVERT functions with date and time data, see CAST and CONVERT (Transact-SQL)

datetimeoffset データ型の他の日付/時刻データ型への変換Converting datetimeoffset data type to other date and time types

ここでは、datetimeoffset データ型が他の日付/時刻データ型に変換される場合の処理について説明します。This section describes what occurs when a datetimeoffset data type is converted to other date and time data types.

date への変換では、年、月、日がコピーされます。When converting to date, the year, month, and day are copied. 次のコードは、datetimeoffset(4) 値を date 値に変換した結果を示しています。The following code shows the results of converting a datetimeoffset(4) value to a date value.

DECLARE @datetimeoffset datetimeoffset(4) = '12-10-25 12:32:10 +01:00';  
DECLARE @date date= @datetimeoffset;  
  
SELECT @datetimeoffset AS '@datetimeoffset ', @date AS 'date';  
  
--Result  
--@datetimeoffset                date  
-------------------------------- ----------  
--2025-12-10 12:32:10.0000 +01:0 2025-12-10  
--  
--(1 row(s) affected)  
  

time(n) への変換の場合は、時、分、秒、および秒の小数部がコピーされます。If the conversion is to time(n), the hour, minute, second, and fractional seconds are copied. タイム ゾーンの値は切り捨てられます。The time zone value is truncated. datetimeoffset(n) の値の有効桁数が time(n) の値の有効桁数を超える場合、値が切り上げられます。When the precision of the datetimeoffset(n) value is greater than the precision of the time(n) value, the value is rounded up. 次のコードでは、datetimeoffset(4) の値を time(3) の値に変換した結果を示します。The following code shows the results of converting a datetimeoffset(4) value to a time(3) value.

DECLARE @datetimeoffset datetimeoffset(4) = '12-10-25 12:32:10.1237 +01:0';  
DECLARE @time time(3) = @datetimeoffset;  
  
SELECT @datetimeoffset AS '@datetimeoffset ', @time AS 'time';  
  
--Result  
--@datetimeoffset                time  
-------------------------------- ------------  
-- 2025-12-10 12:32:10.1237 +01:00    12:32:10.124  
  
--  
--(1 row(s) affected)  
  

datetime に変換するときは、日付と時刻の値がコピーされ、タイム ゾーンが切り捨てられます。When converting todatetime, the date and time values are copied, and the time zone is truncated. datetimeoffset(n) 値の小数部の有効桁数が 3 桁を超える場合、値は切り捨てられます。When the fractional precision of the datetimeoffset(n) value is greater than three digits, the value is truncated. 次のコードでは、datetimeoffset(4) の値を datetime の値に変換した結果を示します。The following code shows the results of converting a datetimeoffset(4) value to a datetime value.

DECLARE @datetimeoffset datetimeoffset(4) = '12-10-25 12:32:10.1237 +01:0';  
DECLARE @datetime datetime = @datetimeoffset;  
  
SELECT @datetimeoffset AS '@datetimeoffset ', @datetime AS 'datetime';  
  
--Result  
--@datetimeoffset                datetime  
-------------------------------- -----------------------  
--2025-12-10 12:32:10.1237 +01:0 2025-12-10 12:32:10.123  
--  
--(1 row(s) affected)  

smalldatetime への変換の場合は、日付と時間がコピーされます。For conversions to smalldatetime, the date and hours are copied. 分は秒の値に応じて切り上げられ、秒は 0 に設定されます。The minutes are rounded up with respect to the seconds value and seconds are set to 0. 次のコードは、datetimeoffset(3) 値を smalldatetime 値に変換した結果を示しています。The following code shows the results of converting a datetimeoffset(3) value to a smalldatetime value.

DECLARE @datetimeoffset datetimeoffset(3) = '1912-10-25 12:24:32 +10:0';  
DECLARE @smalldatetime smalldatetime = @datetimeoffset;  
  
SELECT @datetimeoffset AS '@datetimeoffset', @smalldatetime AS '@smalldatetime';  
  
--Result  
--@datetimeoffset                @smalldatetime  
-------------------------------- -----------------------  
--1912-10-25 12:24:32.000 +10:00 1912-10-25 12:25:00  
--  
--(1 row(s) affected)  

datetime2(n) に変換する場合は、日付と時刻が datetime2 の値にコピーされて、タイム ゾーンは切り捨てられます。If the conversion is to datetime2(n), the date and time are copied to the datetime2 value, and the time zone is truncated. datetime2(n) 値の有効桁数が datetimeoffset(n) 値の有効桁数を超える場合、秒の小数部はその桁数に合わせて切り捨てられます。When the precision of the datetime2(n) value is greater than the precision of the datetimeoffset(n) value, the fractional seconds are truncated to fit. 次のコードは、datetimeoffset(4) 値を datetime2(3) 値に変換した結果を示しています。The following code shows the results of converting a datetimeoffset(4) value to a datetime2(3) value.

DECLARE @datetimeoffset datetimeoffset(4) = '1912-10-25 12:24:32.1277 +10:0';  
DECLARE @datetime2 datetime2(3)=@datetimeoffset;  
  
SELECT @datetimeoffset AS '@datetimeoffset', @datetime2 AS '@datetime2';  
  
--Result  
@datetimeoffset                    @datetime2  
---------------------------------- ----------------------  
1912-10-25 12:24:32.1277 +10:00    1912-10-25 12:24:32.12  
  
--(1 row(s) affected)  

文字列リテラルの datetimeoffset への変換Converting string literals to datetimeoffset

文字列リテラルから日付/時刻データ型への変換は、文字列のすべての部分が有効な形式になっている場合に可能になります。Conversions from string literals to date and time types are permitted if all parts of the strings are in valid formats. それ以外の場合は実行時エラーが発生します。Otherwise, a runtime error is raised. 日付/時刻データ型から文字列リテラルへの暗黙的な変換や、スタイルを指定しない明示的な変換では、現在のセッションの既定の形式が使用されます。Implicit conversions or explicit conversions that do not specify a style, from date and time types to string literals will be in the default format of the current session. 次の表では、文字列リテラルを datetimeoffset データ型に変換する規則を示します。The following table shows the rules for converting a string literal to the datetimeoffset data type.

入力文字列リテラルInput string literal datetimeoffset(n)datetimeoffset(n)
ODBC DATEODBC DATE ODBC 文字列リテラルは、datetime データ型にマップされます。ODBC string literals are mapped to the datetime data type. ODBC DATETIME リテラルから datetimeoffset 型への代入演算を行うと、datetime 型とこれらの型との間で、変換規則で定義されている暗黙的な変換が行われます。Any assignment operation from ODBC DATETIME literals into datetimeoffset types will cause an implicit conversion between datetime and this type as defined by the conversion rules.
ODBC TIMEODBC TIME 上記の ODBC 日付の規則を参照。See previous ODBC DATE rule.
ODBC DATETIMEODBC DATETIME 上記の ODBC 日付の規則を参照。See previous ODBC DATE rule.
DATE のみDATE only 時刻部分は既定値の 00:00:00 に設定されるThe TIME part defaults to 00:00:00. TIMEZONE は既定値の +00:00 に設定される。The TIMEZONE defaults to +00:00.
TIME のみTIME only DATE 部分は既定で 1900-1-1 に設定されます。The DATE part defaults to 1900-1-1. TIMEZONE は既定値の +00:00 に設定される。The TIMEZONE will default to +00:00.
タイム ゾーンのみTIMEZONE only 既定値が設定されるDefault values are supplied
DATE + TIMEDATE + TIME TIMEZONE は既定値の +00:00 に設定される。The TIMEZONE defaults to +00:00.
DATE + TIMEZONEDATE + TIMEZONE 使用不可Not allowed
TIME + TIMEZONETIME + TIMEZONE DATE 部分は既定で 1900-1-1 に設定されます。The DATE part defaults to 1900-1-1.
DATE + TIME + TIMEZONEDATE + TIME + TIMEZONE 単純変換Trivial

使用例Examples

次の例では、文字列をそれぞれの date および time データ型にキャストした結果を比較します。The following example compares the results of casting a string to each date and time data type.

SELECT   
     CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time'   
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date'   
    ,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS   
        'smalldatetime'   
    ,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime'   
    ,CAST('2007-05-08 12:35:29.1234567+12:15' AS datetime2(7)) AS   
        'datetime2'  
    ,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS   
        'datetimeoffset'  
    ,CAST('2007-05-08 12:35:29.1234567+12:15' AS datetimeoffset(7)) AS  
        'datetimeoffset IS08601';  

以下に結果セットを示します。Here is the result set.

データ型Data type [出力]Output
[時刻]Time 12:35:29.12:35:29. 12345671234567
DateDate 2007-05-082007-05-08
SmalldatetimeSmalldatetime 2007-05-08 12:35:002007-05-08 12:35:00
DateTimeDatetime 2007-05-08 12:35:29.1232007-05-08 12:35:29.123
datetime2datetime2 2007-05-08 12:35:29.2007-05-08 12:35:29. 12345671234567
DatetimeoffsetDatetimeoffset 2007-05-08 12:35:29.1234567 +12:152007-05-08 12:35:29.1234567 +12:15

参照See also

CAST および CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
AT TIME ZONE (Transact-SQL)AT TIME ZONE (Transact-SQL)