datetime2 (Transact-SQL)datetime2 (Transact-SQL)

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

24 時間形式の時刻と組み合わせた日付を定義します。Defines a date that is combined with a time of day that is based on 24-hour clock. datetime2 は、既存の datetime 型を拡張して、日付範囲と既定の有効桁数を増やし、ユーザーが必要に応じて有効桁数を指定できるようにしたものと考えることができます。datetime2 can be considered as an extension of the existing datetime type that has a larger date range, a larger default fractional precision, and optional user-specified precision.

datetime2 の説明datetime2 description

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

CREATE TABLE Table1 ( Column1 datetime2(7) )CREATE TABLE Table1 ( Column1 datetime2(7) )
既定の文字列リテラル形式Default string literal format

(下位クライアントに使用)(used for down-level client)
YYYY-MM-DD hh:mm:ss[.fractional seconds]YYYY-MM-DD hh:mm:ss[.fractional seconds]

詳細については、後述の「下位クライアントの下位互換性」セクションを参照してください。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 なしNone
要素範囲Element ranges YYYY は、年を表す 0001 から 9999 までの 4 桁の数字です。YYYY is a four-digit number, ranging from 0001 through 9999, that represents a year.

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

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

hh は、時を表す 00 から 23 までの 2 桁の数字です。hh is a two-digit number, ranging from 00 to 23, that represents the hour.

mm は、分を表す 00 から 59 までの 2 桁の数字です。mm is a two-digit number, ranging from 00 to 59, that represents the minute.

ss は、秒を表す 00 ~ 59 の 2 桁の数字です。ss is a two-digit number, ranging from 00 to 59, that represents the second.

n* は、秒の小数部の有効桁数を表す 0 ~ 7 桁の数字です (0 ~ 9999999)。n* is a zero- to seven-digit number from 0 to 9999999 that represents the fractional seconds. Informatica では、秒の小数部が 3 桁より多いときは切り捨てられます。In Informatica, the fractional seconds will be truncated when n > 3.
文字長Character length 19 文字 (YYYY-MM-DD hh:mm:ss ) 以上、27 文字 (YYYY-MM-DD hh:mm:ss.0000000) 以下19 positions minimum (YYYY-MM-DD hh:mm:ss ) to 27 maximum (YYYY-MM-DD hh:mm:ss.0000000)
有効桁数、小数点以下桁数Precision, scale 0 から 7 桁で、精度は 100ns です。0 to 7 digits, with an accuracy of 100ns. 既定の有効桁数は 7 桁です。The default precision is 7 digits.
ストレージ サイズStorage size 有効桁数が 3 より小さい場合は 6 バイトです。6 bytes for precision less than 3.
有効桁数が 3 または 4 の場合は 7 バイトです。7 bytes for precision 3 or 4.
その他のすべての有効桁数では 8 バイトが必要です。1All other precision require 8 bytes.1
精度Accuracy 100 ナノ秒100 nanoseconds
既定値Default value 1900-01-01 00:00:001900-01-01 00:00:00
カレンダーCalendar グレゴリオ暦Gregorian
ユーザー定義の 1 秒未満の秒の有効桁数User-defined fractional second precision はいYes
タイム ゾーン オフセットへの対応と保持Time zone offset aware and preservation いいえNo
夏時間への対応Daylight saving aware いいえNo

1 datetime2 値の最初のバイトで、値の有効桁数が格納されます。つまり、datetime2 値に必要な実際のストレージは、上の表に示されているストレージ サイズに、有効桁数を格納するためにさらに 1 バイトを加算したものとなります。1 The first byte of a datetime2 value stores the precision of the value, which means the actual storage required for a datetime2 value is the storage size indicated in the table above plus 1 additional byte to store the precision. これにより、datetime2 値の最大サイズは 9 バイトとなります。つまり、最大有効桁数でのデータ ストレージのために 8 バイトを加算した有効桁数が、1 バイトで格納されます。This makes the maximum size of a datetime2 value 9 bytes - 1 byte stores precision plus 8 bytes for data storage at maximum precision.

データ型のメタデータについては、「sys.systypes (Transact-SQL)」または「TYPEPROPERTY (Transact-SQL)」をご覧ください。For data type metadata, see sys.systypes (Transact-SQL) or TYPEPROPERTY (Transact-SQL). 一部の日付時刻データ型では、有効桁数および小数点以下桁数が可変です。Precision and scale are variable for some date and time data types. 列の有効桁数と小数点以下桁数を取得す方法については、「COLUMNPROPERTY (Transact-SQL)」、COL_LENGTH (Transact-SQL)」、または「sys.columns (Transact-SQL)」をご覧ください。To obtain the precision and scale for a column, see COLUMNPROPERTY (Transact-SQL), COL_LENGTH (Transact-SQL), or sys.columns (Transact-SQL).

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

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

ISO 8601ISO 8601 [説明]Descriptions
YYYY-MM-DDThh:mm:ss[.nnnnnnn]YYYY-MM-DDThh:mm:ss[.nnnnnnn]

YYYY-MM-DDThh:mm:ss[.nnnnnnn]YYYY-MM-DDThh:mm:ss[.nnnnnnn]
この形式は、セッションのロケール設定である SET LANGUAGE および SET DATEFORMAT の影響を受けません。This format is not affected by the SET LANGUAGE and SET DATEFORMAT session locale settings. 文字列リテラルには、T、コロン (:)、およびピリオド (.) が含まれます (例: '2007-05-02T19:58:47.1234567')。The T, the colons (:) and the period (.) are included in the string literal, for example '2007-05-02T19:58:47.1234567'.
ODBCODBC [説明]Description
{ ts 'yyyy-mm-dd hh:mm:ss[.fractional seconds]' }{ ts 'yyyy-mm-dd hh:mm:ss[.fractional seconds]' } ODBC API 固有:ODBC API specific:

1 秒未満の秒を表す小数点の右側の桁数は、0 から 7 (100 ナノ秒) の範囲で指定できます。The number of digits to the right of the decimal point, which represents the fractional seconds, can be specified from 0 up to 7 (100 nanoseconds).

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

datetime2 の ANSI および ISO 8601 への準拠は、date 型および time 型と同じです。The ANSI and ISO 8601 compliance of date and time apply to datetime2.

下位クライアントの下位互換性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)

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

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

date からの変換では、年、月、日がコピーされます。When the conversion is from date, the year, month and day are copied. 時刻部分は 00:00:00.0000000 に設定されます。The time component is set to 00:00:00.0000000. 次のコードでは、date の値を datetime2 の値に変換した結果を示します。The following code shows the results of converting a date value to a datetime2 value.

DECLARE @date date = '12-21-16';
DECLARE @datetime2 datetime2 = @date;

SELECT @datetime2 AS '@datetime2', @date AS '@date';
  
--Result  
--@datetime2                  @date
----------------------------- ----------
--2016-12-21 00:00:00.0000000 2016-12-21

time(n) からの変換では、時刻部分がコピーされ、日付部分は "1900-01-01" に設定されます。When the conversion is from time(n), the time component is copied, and the date component is set to '1900-01-01'. 次の例は、time(7) 値を datetime2 値に変換した結果を示しています。The following example shows the results of converting a time(7) value to a datetime2 value.

DECLARE @time time(7) = '12:10:16.1234567';
DECLARE @datetime2 datetime2 = @time;

SELECT @datetime2 AS '@datetime2', @time AS '@time';
  
--Result  
--@datetime2                  @time
----------------------------- ----------------
--1900-01-01 12:10:16.1234567 12:10:16.1234567

smalldatetime からの変換では、時と分がコピーされます。When the conversion is from smalldatetime, the hours and minutes are copied. 秒と秒の小数部は 0 に設定されます。The seconds and fractional seconds are set to 0. 次のコードは、smalldatetime 値を datetime2 値に変換した結果を示しています。The following code shows the results of converting a smalldatetime value to a datetime2 value.

DECLARE @smalldatetime smalldatetime = '12-01-16 12:32';
DECLARE @datetime2 datetime2 = @smalldatetime;

SELECT @datetime2 AS '@datetime2', @smalldatetime AS '@smalldatetime'; 
  
--Result  
--@datetime2                  @smalldatetime
----------------------------- -----------------------
--2016-12-01 12:32:00.0000000 2016-12-01 12:32:00 

datetimeoffset(n) からの変換では、日付と時刻の部分がコピーされます。When the conversion is from datetimeoffset(n), the date and time components are copied. タイム ゾーンは切り捨てられます。The time zone is truncated. 次の例は、datetimeoffset(7) 値を datetime2 値に変換した結果を示しています。The following example shows the results of converting a datetimeoffset(7) value to a datetime2 value.

DECLARE @datetimeoffset datetimeoffset(7) = '2016-10-23 12:45:37.1234567 +10:0';
DECLARE @datetime2 datetime2 = @datetimeoffset;

SELECT @datetime2 AS '@datetime2', @datetimeoffset AS '@datetimeoffset'; 
  
--Result  
--@datetime2                  @datetimeoffset
----------------------------- ----------------------------------
--2016-10-23 12:45:37.1234567 2016-10-23 12:45:37.1234567 +10:00

datetime からの変換では、日付と時刻がコピーされます。When the conversion is from datetime, the date and time are copied. 小数部の有効桁数は 7 桁まで拡張されます。The fractional precision is extended to 7 digits. 次の例は、datetime 値を datetime2 値に変換した結果を示しています。The following example shows the results of converting a datetime value to a datetime2 value.

DECLARE @datetime datetime = '2016-10-23 12:45:37.333';
DECLARE @datetime2 datetime2 = @datetime;

SELECT @datetime2 AS '@datetime2', @datetime AS '@datetime';
   
--Result  
--@datetime2                  @datetime
------------------------- ---------------------------
--2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333

注意

データベース互換性レベル 130 の下で、datetime から datetime2 にデータ型を暗黙的に変換するとき、精度が上がります。上の例に示すように、小数ミリ秒が計算に入り、結果的にさまざまな変換値が生成されます。Under database compatibility level 130, implicit conversions from datetime to datetime2 data types show improved accuracy by accounting for the fractional milliseconds, resulting in different converted values, as seen in the example above. datetime データ型と datetime2 データ型の間で混合比較シナリオが存在する場合、datetime2 データ型への明示的型変換を使用します。Use explicit casting to datetime2 datatype whenever a mixed comparison scenario between datetime and datetime2 datatypes exists. 詳細については、この Microsoft サポート技術情報を参照してください。For more information, refer to this Microsoft Support Article.

文字列リテラルから datetime2 への変換Converting String Literals to datetime2

文字列リテラルから日付/時刻データ型への変換は、文字列のすべての部分が有効な形式になっている場合に可能になります。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. 次の表では、文字列リテラルを datetime2 データ型に変換する規則を示します。The following table shows the rules for converting a string literal to the datetime2 data type.

入力文字列リテラルInput string literal datetime2(n)datetime2(n)
ODBC DATEODBC DATE ODBC 文字列リテラルは、datetime データ型にマップされます。ODBC string literals are mapped to the datetime data type. ODBC DATETIME リテラルから datetime2 型への代入演算を行うと、datetime 型とこれらの型との間で、変換規則で定義されている暗黙的な変換が行われます。Any assignment operation from ODBC DATETIME literals into datetime2 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.
TIME のみTIME only DATE 部分は既定で 1900-1-1 に設定されます。The DATE part defaults to 1900-1-1.
タイム ゾーンのみTIMEZONE only 既定値が指定されます。Default values are supplied.
DATE + TIMEDATE + TIME 単純変換Trivial
DATE + TIMEZONEDATE + TIMEZONE 許可されていません。Not allowed.
TIME + TIMEZONETIME + TIMEZONE DATE 部分は既定で 1900-1-1 に設定されます。The DATE part defaults to 1900-1-1. タイム ゾーンの入力は無視される。TIMEZONE input is ignored.
DATE + TIME + TIMEZONEDATE + TIME + TIMEZONE ローカル DATETIME が使用されます。The local DATETIME will be used.

使用例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';  

結果セットは次のようになります。Here is the result set.

データ型Data type [出力]Output
timetime 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)