datetime (Transact-SQL)
24 時間形式の時刻 (1 秒未満の秒を含む) と組み合わせた日付を定義します。
注 |
---|
新しい作業項目に対しては、time、date、datetime2、および datetimeoffset データ型を使用します。 これらの型は、SQL 標準に準拠しています。 これらの型は、より高い移植性を持ちます。 time、datetime2、および datetimeoffset は、分に関してより高い有効桁数を提供します。 datetimeoffset は、グローバルに配置されるアプリケーション向けにタイム ゾーンのサポートを提供します。 |
datetime の説明
プロパティ |
値 |
---|---|
構文 |
datetime |
使用方法 |
DECLARE @MyDatetime datetime CREATE TABLE Table1 ( Column1 datetime ) |
既定の文字列リテラル形式 (下位のクライアントに使用) |
該当なし |
日付範囲 |
1753 年 1 月 1 日~ 9999 年 12 月 31 日 |
時刻範囲 |
00:00:00 ~ 23:59:59.997 |
タイム ゾーン オフセット範囲 |
なし |
要素範囲 |
YYYY は、1753 ~ 9999 の年を表す 4 桁の数字です。 MM は、指定された年の 01 ~ 12 の月を表す 2 桁の数字です。 DD は、指定された月の (月に応じて) 01 ~ 31 の日を表す 2 桁の数字です。 hh は、00 ~ 23 の時を表す 2 桁の数字です。 mm は、00 ~ 59 の分を表す 2 桁の数字です。 ss は、00 ~ 59 の秒を表す 2 桁の数字です。 n* は、秒の有効桁数を表す 3 桁の数字です (0 ~ 999)。 |
文字長 |
19 文字以上、23 文字以下 |
ストレージのサイズ |
8 バイト |
精度 |
値は、.000、.003、または .007 秒単位に丸められます。 |
既定値 |
1900-01-01 00:00:00 |
カレンダー |
グレゴリオ暦 (完全な年の範囲は含まれません。) |
ユーザー定義の 1 秒未満の秒の有効桁数 |
なし |
タイム ゾーン オフセットへの対応と保持 |
不可 |
夏時間への対応 |
不可 |
datetime でサポートされる文字列リテラル形式
次の表は、datetime でサポートされている文字列リテラル形式を一覧にしたものです。 ODBC を除き、datetime の文字列リテラルは単一引用符 (') で囲んで指定します (例: 'string_literaL')。 us_english 以外の環境では、文字列リテラルを N'string_literaL' 形式で指定する必要があります。
数値 |
説明 |
---|---|
日付形式 : [0]4/15/[19]96 -- (mdy) [0]4-15-[19]96 -- (mdy) [0]4.15.[19]96 -- (mdy) [0]4/[19]96/15 -- (myd) 15/[0]4/[19]96 -- (dmy) 15/[19]96/[0]4 -- (dym) [19]96/15/[0]4 -- (ydm) [19]96/[0]4/15 -- (ymd) 時刻形式 : 14:30 14:30[:20:999] 14:30[:20.9] 4am 4 PM |
月名を数値で表して日付データを指定できます。 たとえば、5/20/97 は 1997 年 5 月 20 日を表します。 数値データの形式を使用する場合、文字列の年、月、日は、スラッシュ (/)、ハイフン (-)、またはピリオド (.) で区切って指定します。 この文字列は、次の形式に従う必要があります。
言語設定が us_english の場合、既定の日付順序は月、日、年 (mdy) です。 日付順序は、SET DATEFORMAT ステートメントを使用して変更できます。 SET DATEFORMAT の設定は、日付の値がどのように解釈されるかを決定します。 指定した順序が設定と一致しない場合、範囲外となって日付として解釈されないか、または間違って解釈されます。 たとえば、12/10/08 は、DATEFORMAT の設定によっては、6 種類の日付形式のうちのいずれにも解釈できます。 4 桁の部分は年と解釈されます。 |
アルファベット |
説明 |
---|---|
Apr[il] [15][,] 1996 Apr[il] 15[,] [19]96 Apr[il] 1996 [15] [15] Apr[il][,] 1996 15 Apr[il][,][19]96 15 [19]96 apr[il] [15] 1996 apr[il] 1996 APR[IL] [15] 1996 [15] APR[IL] |
月の正式名を使って日付データを指定できます。 たとえば、現在の言語で指定されている April やその省略形である Apr を使用できます。コンマは省略でき、大文字と小文字の違いは無視されます。 アルファベット日付形式の使用に関するガイドラインを次に示します。
月をアルファベット形式で指定したときは、SET DATEFORMAT のセッション設定は適用されません。 |
ISO 8601 |
説明 |
---|---|
YYYY-MM-DDThh:mm:ss[.mmm] YYYYMMDD[ hh:mm:ss[.mmm]] |
例:
ISO 8601 形式を使用するには、その形式で各要素を指定する必要があります。 これには、T、コロン (:)、およびピリオド (.) も含まれます。 秒の構成要素を示す角かっこは省略できます。 時の構成要素は 24 時間形式で指定します。 T は、datetime 値の時刻の部分の先頭を示します。 ISO 8601 形式を使用する利点は、これが明確な仕様を持つ国際標準であるという点です。 また、この形式は、SET DATEFORMAT や SET LANGUAGE の設定の影響を受けません。 |
区切りなし |
説明 |
---|---|
YYYYMMDD hh:mm:ss[.mmm] |
ODBC |
説明 |
||||||||
---|---|---|---|---|---|---|---|---|---|
{ ts '1998-05-02 01:23:56.123' } { d '1990-10-02' } { t '13:33:41' } |
ODBC API では、日付時刻値を表すエスケープ シーケンスが定義されます。ODBC ではこれをタイムスタンプ データと呼びます。 この ODBC タイムスタンプ形式は、Microsoft OLE DB Provider for SQL Server でサポートされる OLE DB 言語定義 (DBGUID-SQL) でもサポートされます。 ADO、OLE DB、および ODBC ベースの API を使用しているアプリケーションでは、この ODBC タイムスタンプ形式を使用して日付/時刻を表すことができます。 ODBC タイムスタンプ エスケープ シーケンスの形式を次に示します。{ literal_type 'constant_value' }:
|
datetime における 1 秒未満の秒の有効桁数の丸め処理
以下の表に示すように、datetime 値は .000、.003、または .007 秒の単位になるように丸められます。
ユーザー指定の値 |
システム格納値 |
---|---|
01/01/98 23:59:59.999 |
1998-01-02 00:00:00.000 |
01/01/98 23:59:59.995 01/01/98 23:59:59.996 01/01/98 23:59:59.997 01/01/98 23:59:59.998 |
1998-01-01 23:59:59.997 |
01/01/98 23:59:59.992 01/01/98 23:59:59.993 01/01/98 23:59:59.994 |
1998-01-01 23:59:59.993 |
01/01/98 23:59:59.990 01/01/98 23:59:59.991 |
1998-01-01 23:59:59.990 |
ANSI および ISO 8601 への準拠
datetime は ANSI または ISO 8601 に準拠していません。
日付型データと時刻型データの変換
data 型と time 型に変換する場合、SQL Server で日付や時刻と認識できない値はすべて拒否されます。 CAST 関数および CONVERT 関数で日付と時刻のデータを使用する方法については、「CAST および CONVERT (Transact-SQL)」を参照してください。
datetime の他の日付/時刻データ型への変換
次の表では、datetime データ型が他の日付/時刻データ型に変換される場合の処理について説明します。
変換先のデータ型 |
変換の詳細 |
---|---|
date |
年、月、日がコピーされます。 時刻部分は 00:00:00.000 に設定されます。 次のコードは、date 値を datetime 値に変換した結果を示しています。
|
time(n) |
時刻部分がコピーされ、日付部分が '1900-01-01' に設定されます。 time(n) 値の小数部の有効桁数が 3 桁を超える場合、値はその桁数に合わせて切り捨てられます。 次の例は、time(4) 値を datetime 値に変換した結果を示しています。
|
smalldatetime |
時間と分がコピーされます。 秒と秒の小数部は 0 に設定されます。 次のコードは、smalldatetime 値を datetime 値に変換した結果を示しています。
|
datetimeoffset(n) |
日付部分と時刻部分がコピーされます。 タイム ゾーンは切り捨てられます。 datetimeoffset(n) 値の小数部の有効桁数が 3 桁を超える場合、値は切り捨てられます。 次の例は、datetimeoffset(4) 値を datetime 値に変換した結果を示しています。
|
datetime2(n) |
日付と時刻がコピーされます。 datetime2(n) 値の小数部の有効桁数が 3 桁を超える場合、値は切り捨てられます。 次の例は、datetime2(4) 値を 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 |