datetime2 (Transact-SQL)
24 時間形式の時刻と組み合わせた日付を定義します。 datetime2 は、既存の datetime 型を拡張して、日付範囲と既定の有効桁数を増やし、ユーザーが必要に応じて有効桁数を指定できるようにしたものと考えることができます。
datetime2 の説明
プロパティ |
値 |
---|---|
構文 |
datetime2 [ (fractional seconds precision) ] |
使用方法 |
DECLARE @MyDatetime2 datetime2(7) CREATE TABLE Table1 ( Column1 datetime2(7) ) |
既定の文字列リテラル形式 (下位のクライアントに使用) |
YYYY-MM-DD hh:mm:ss[.fractional seconds] 詳細については、以下の「下位クライアントの下位互換性」セクションを参照してください。 |
日付範囲 |
0001-01-01 ~ 9999-12-31 西暦 1 年 1 月 1 日~西暦 9999 年 12 月 31 日 |
時刻範囲 |
00:00:00 ~ 23:59:59.9999999 |
タイム ゾーン オフセット範囲 |
なし |
要素範囲 |
YYYY は、年を表す 0001 ~ 9999 の 4 桁の数字です。 MM は、指定された年の 01 ~ 12 の月を表す 2 桁の数字です。 DD は、指定された月の (月に応じて) 01 ~ 31 の日を表す 2 桁の数字です。 hh は、時を表す 00 ~ 23 の 2 桁の数字です。 mm は、分を表す 00 ~ 59 の 2 桁の数字です。 ss は、秒を表す 00 ~ 59 の 2 桁の数字です。 n* は、秒の有効桁数を表す 0 ~ 7 桁の数字です (0 ~ 9999999)。 |
文字長 |
19 文字 (YYYY-MM-DD hh:mm:ss ) 以上、27 文字 (YYYY-MM-DD hh:mm:ss.0000000) 以下 |
有効桁数、小数点以下桁数 |
0 ~ 7 桁で、精度は 100ns です。 既定の有効桁数は 7 桁です。 |
ストレージのサイズ |
有効桁数が 3 未満の場合は 6 バイト、有効桁数が 3 および 4 の場合は 7 バイトです。 その他のすべての有効桁数には 8 バイトが必要です。 |
精度 |
100 ナノ秒 |
既定値 |
1900-01-01 00:00:00 |
カレンダー |
グレゴリオ暦 |
ユーザー定義の、秒の小数部の有効桁数 |
可 |
タイム ゾーン オフセットへの対応と保持 |
不可 |
夏時間への対応 |
不可 |
データ型のメタデータについては、「sys.systypes (Transact-SQL)」または「TYPEPROPERTY (Transact-SQL)」を参照してください。 一部の日付時刻データ型では、有効桁数および小数点以下桁数が可変です。 特定の列の有効桁数および小数点以下桁数を取得する方法については、「COLUMNPROPERTY (Transact-SQL)」、「COL_LENGTH (Transact-SQL)」、または「sys.columns (Transact-SQL)」を参照してください。
datetime2 でサポートされる文字列リテラル形式
次の表は、datetime2 でサポートされている ISO 8601 および ODBC の文字列リテラル形式を一覧にしたものです。 datetime2 の日付部分と時刻部分に使用できるアルファベット、数値、区切りなし、時刻の各形式については、「date (Transact-SQL)」および「time (Transact-SQL)」を参照してください。
ISO 8601 |
説明 |
---|---|
YYYY-MM-DDThh:mm:ss[. nnnnnnn] YYYY-MM-DDThh:mm:ss[. nnnnnnn] |
この形式は、セッションのロケール設定である SET LANGUAGE および SET DATEFORMAT の影響を受けません。 文字列リテラルには、T、コロン (:)、およびピリオド (.) が含まれます (例 : '2007-05-02T19:58:47.1234567')。 |
ODBC |
説明 |
---|---|
{ ts 'yyyy-mm-dd hh:mm:ss[.fractional seconds]' } |
ODBC API 固有です。
|
ANSI および ISO 8601 への準拠
datetime2 の ANSI および ISO 8601 への準拠は、date 型および time 型と同じです。
下位クライアントの下位互換性
一部の下位クライアントは、time 型、date 型、datetime2 型、および datetimeoffset 型をサポートしていません。 SQL Server の上位インスタンスと下位クライアントの間のデータ型マッピングを次の表に示します。
SQL Server 2012 データ型 |
下位クライアントに渡される既定の文字列リテラル形式 |
下位 ODBC |
下位 OLEDB |
下位 JDBC |
下位 SQLCLIENT |
---|---|---|---|---|---|
time |
hh:mm:ss[. nnnnnnn] |
SQL_WVARCHAR または SQL_VARCHAR |
DBTYPE_WSTR または DBTYPE_STR |
Java.sql.String |
String または SqString |
date |
YYYY-MM-DD |
SQL_WVARCHAR または SQL_VARCHAR |
DBTYPE_WSTR または DBTYPE_STR |
Java.sql.String |
String または SqString |
datetime2 |
YYYY-MM-DD hh:mm:ss[. nnnnnnn] |
SQL_WVARCHAR または SQL_VARCHAR |
DBTYPE_WSTR または DBTYPE_STR |
Java.sql.String |
String または SqString |
datetimeoffset |
YYYY-MM-DD hh:mm:ss[. nnnnnnn] [+|-]hh:mm |
SQL_WVARCHAR または SQL_VARCHAR |
DBTYPE_WSTR または DBTYPE_STR |
Java.sql.String |
String または SqString |
日付型データと時刻型データの変換
data 型と time 型に変換する場合、SQL Server で日付や時刻と認識できない値はすべて拒否されます。 CAST 関数および CONVERT 関数で日付と時刻のデータを使用する方法については、「CAST および CONVERT (Transact-SQL)」を参照してください。
datetime2 データ型から他の日付/時刻データ型への変換
次の表では、datetime2 データ型が他の日付/時刻データ型に変換される場合の処理について説明します。
変換先のデータ型 |
変換の詳細 |
---|---|
date |
年、月、日がコピーされます。 次のコードは、datetime2(4) 値を date 値に変換した結果を示しています。
|
time(n) |
秒の小数部の桁数が同じ場合、時間、分、秒、および秒の小数部がコピーされ、秒の小数部の桁数が異なる場合、切り上げられます。 次のコードは、datetime2(4) 値を time(3) 値に変換した結果を示しています。
|
datetime |
日付と時刻の値がコピーされます。 datetime(n) 値の小数部の有効桁数が 3 桁を超える場合、値は切り捨てられます。 次のコードは、datetime2 値を datetime 値に変換した結果を示しています。
|
smalldatetime |
日付および時間がコピーされます。 秒を基準として分が切り上げられ、秒は 0 に設定されます。 次のコードは、datetime2 値を smalldatetime 値に変換した結果を示しています。
|
datetimeoffset(n) |
datetime2(n) 値が datetimeoffset(n) 値にコピーされます。 タイム ゾーン オフセットが +00:0 に設定されます。 datetime2(n) 値の有効桁数が datetimeoffset(n) 値の有効桁数を超える場合、値はその桁数に合わせて切り上げられます。 次のコードは、datetime2(5) 値を datetimeoffset(3) 値に変換した結果を示しています。
|
文字列リテラルから datetime2 への変換
文字列リテラルから日付/時刻データ型への変換は、文字列のすべての部分が有効な形式になっている場合に可能になります。 それ以外の場合は実行時エラーが発生します。 日付/時刻データ型から文字列リテラルへの暗黙的な変換や、スタイルを指定しない明示的な変換では、現在のセッションの既定の形式が使用されます。 次の表に、文字列リテラルを datetime2 データ型に変換する規則を示します。
入力文字列リテラル |
datetime2(n) |
---|---|
ODBC 日付 |
ODBC 文字列リテラルは、datetime データ型にマップされます。 ODBC 日付時刻リテラルから datetime2 型への代入演算を行うと、datetime 型とこれらの型との間で、変換規則で定義されている暗黙的な変換が行われます。 |
ODBC 時刻 |
上記の ODBC 日付の規則を参照。 |
ODBC 日付時刻 |
上記の ODBC 日付の規則を参照。 |
日付のみ |
時刻部分は既定値の 00:00:00 に設定される |
時刻のみ |
日付部分は既定値の 1900-1-1 に設定される |
タイム ゾーンのみ |
既定値が設定される |
日付 + 時刻 |
単純変換 |
日付 + タイム ゾーン |
使用不可 |
時刻 + タイム ゾーン |
日付部分は既定値の 1900-1-1 に設定される。 タイム ゾーンの入力は無視される。 |
日付 + 時刻 + タイム ゾーン |
ローカル datetime が使用される |
使用例
次の例では、文字列をそれぞれの date および time データ型にキャストした結果を比較します。
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';
以下に結果セットを示します。
データ型 |
出力 |
---|---|
time |
12:35:29. 1234567 |
date |
2007-05-08 |
smalldatetime |
2007-05-08 12:35:00 |
datetime |
2007-05-08 12:35:29.123 |
datetime2 |
2007-05-08 12:35:29. 1234567 |
datetimeoffset |
2007-05-08 12:35:29.1234567 +12:15 |