datetime (Transact-SQL)

24 時間形式の時刻 (1 秒未満の秒を含む) と組み合わせた日付を定義します。

注意注意

新しい作業項目に対しては、time、date、datetime2、および datetimeoffset データ型を使用します。これらの型は、SQL 標準に準拠しています。これらの型は、より高い移植性を持ちます。time、datetime2、および datetimeoffset は、分に関してより高い有効桁数を提供します。datetimeoffset は、グローバルに配置されるアプリケーション向けにタイム ゾーンのサポートを提供します。

Transact-SQL の日付と時刻のデータ型および関数の概要については、「日付と時刻のデータ型および関数 (Transact-SQL)」を参照してください。日付と時刻のデータ型および関数の一般的な例については、「日時データの使用」を参照してください。

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 日を表します。数値データの形式を使用する場合、文字列の年、月、日は、スラッシュ (/)、ハイフン (-)、またはピリオド (.) で区切って指定します。この文字列は、次の形式に従う必要があります。

  • number separator number separator number [time] [time]

言語設定が 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 を使用できます。コンマは省略でき、大文字と小文字の違いは無視されます。

アルファベット日付形式の使用に関するガイドラインを次に示します。

  • 日時データを単一引用符 (') で囲みます。English 以外の言語では、N' を使用します。

  • 角かっこで囲まれた文字は省略可能です。

  • 西暦の最後の 2 桁のみを指定した場合、その値が two digit year cutoff 構成オプションの上限値の最後の 2 桁より小さければ、指定した西暦は終了年と同じ世紀になります。この構成オプションより値が大きいか、または同じである場合、指定した西暦は終了年の世紀より前の世紀になります。たとえば、two digit year cutoff が 2050 (既定値) である場合、25 は 2025 年と解釈され、50 は 1950 年と解釈されます。こうしたあいまいさを排除するため、4 桁の西暦を使用してください。

  • 日を省略したときは、その月の 1 日が指定されます。

月をアルファベット形式で指定したときは、SET DATEFORMAT のセッション設定は適用されません。

ISO 8601

内容

YYYY-MM-DDThh:mm:ss[.mmm]

YYYYMMDDThh:mm:ss[.mmm]

例 :

  • 2004-05-23T14:25:10

  • 2004-05-23T14:25:10.487

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' }:

  • literal_type はエスケープ シーケンスの種類を指定します。タイムスタンプには次の 3 つの literal_type 指定子があります。

    • d = 日付のみ

    • t = 時刻のみ

    • ts = タイムスタンプ (時刻と日付)

  • 'constant_value' はエスケープ シーケンスの値です。constant_value は literal_type ごとに次の形式に従う必要があります。

    literal_typeconstant_value の形式
    dyyyy-mm-dd
    t hh:mm:ss[.fff]
    tsyyyy-mm-dd hh:mm:ss[.fff]

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 に準拠していません。

次の例では、文字列をそれぞれの 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