date (Transact-SQL)

日付を定義します。

date の説明

プロパティ

構文

date

使用方法

DECLARE @MyDate date

CREATE TABLE Table1 ( Column1 date )

既定の文字列リテラル形式

(下位のクライアントに使用)

YYYY-MM-DD            

詳細については、以下の「下位クライアントの下位互換性」セクションを参照してください。

範囲

0001-01-01 ~ 9999-12-31

西暦 1 年 1 月 1 日 ~西暦 9999 年 12 月 31 日

要素範囲

YYYY は、0001 ~ 9999 の年を表す 4 桁の数字です。

MM は、指定された年の 01 ~ 12 の月を表す 2 桁の数字です。

DD は、指定された月の (月に応じて) 01 ~ 31 の日を表す 2 桁の数字です。

文字長

10 文字

有効桁数、小数点以下桁数

10, 0

ストレージのサイズ

3 バイト、固定

ストレージ構造

1 つの 3 バイト整数で日付を格納します。

精度

1 日

既定値

1900-01-01

この値は、time から datetime2 または datetimeoffset への暗黙的な変換で、付加的な日付要素として使用されます。

カレンダー

グレゴリオ暦

ユーザー定義の、秒の小数部の有効桁数

タイム ゾーン オフセットへの対応と保持

夏時間への対応

date でサポートされる文字列リテラル形式

次の表は、date データ型に使用できる有効な文字列リテラル形式を示しています。

数値

説明

mdy                         

[m]m/dd/[yy]yy       

[m]m/dd/[yy]yy       

[m]m.dd.[yy]yy       

myd                         

mm/[yy]yy/dd       

mm-[yy]yy/dd       

[m]m.[yy]yy.dd       

dmy                         

dd/[m]m/[yy]yy       

dd-[m]m-[yy]yy       

dd.[m]m.[yy]yy       

dym                         

dd/[yy]yy/[m]m       

dd-[yy]yy-[m]m       

dd.[yy]yy.[m]m       

ymd                         

[yy]yy/[m]m/dd       

[yy]yy-[m]m-dd       

[yy]yy-[m]m-dd       

[m]m、dd、および [yy]yy は、スラッシュ (/)、ハイフン (-)、またはピリオド (.) で区切られた文字列の月、日、および年を表します。

4 桁または 2 桁の年だけがサポートされています。 可能な限り 4 桁の年を使用してください。 2 桁の数字を 4 桁の西暦として解釈する場合に、世紀の解釈の区切りとする年を 0001 ~ 9999 の範囲の整数で指定するには、two digit year cutoff サーバー構成オプションの構成を使用します。

2 桁の西暦が、終了年の末尾の 2 桁の数値以下である場合は、終了年と同じ世紀として解釈されます。 終了年の末尾の 2 桁の数値よりも大きい場合は、終了年の 1 つ前の世紀と解釈されます。 たとえば、two digit year cutoff が 2049 (既定値) である場合、2 桁表記が 49 であれば、2049 年と解釈されます。2 桁表記が 50 であれば、1950 年と解釈されます。

既定の日付形式は、現在の言語設定によって決まります。 日付形式は、SET LANGUAGE ステートメントおよび SET DATEFORMAT ステートメントを使って変更できます。

date では、ydm 形式はサポートされません。

アルファベット

説明

mon [dd][,] yyyy      

mon dd[,] [yy]yy      

mon yyyy [dd]          

[dd] mon[,] yyyy      

dd mon[,][yy]yy       

dd [yy]yy mon         

[dd] yyyy mon         

yyyy mon [dd]         

yyyy [dd] mon         

mon は、現在の言語における月の正式名または省略形を表します。 コンマは省略可能であり、大文字と小文字は無視されます。

こうしたあいまいさを排除するため、4 桁の西暦を使用してください。

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

ISO 8601

説明

YYYY-MM-DD            

YYYYMMDD               

SQL 標準と同じです。 これが国際標準として定義された唯一の形式です。

区切りなし

説明

[yy]yymmdd            

yyyy[mm][dd]          

date データは、4 桁、6 桁、または 8 桁で指定できます。 6 桁または 8 桁の文字列は、常に ymd と解釈されます。 月と日は常に 2 桁です。 4 桁の文字列は年として解釈されます。

ODBC

説明

{ d 'yyyy-mm-dd' }   

ODBC API 固有です。

SQL Server 2012 でも SQL Server 2005 と同様に機能します。

W3C XML 形式

説明

yyyy-mm-ddTZD      

XML/SOAP 用にサポートされています。

TZD は、タイム ゾーン指定子 (Z または +hh:mm または -hh:mm) です。

  • hh:mm はタイム ゾーン オフセットを表します。 hh は、タイム ゾーン オフセットの時間数を表す 0 ~ 14 の 2 桁の数字です。

  • MM は、タイム ゾーン オフセットの付加的な分数を表す 0 ~ 59 の 2 桁の数字です。

  • タイム ゾーン オフセットでは、+ (正負号) または – (負符号) を必ず指定します。 ローカル時刻を取得する際、協定世界時 (UTC) を基準としてタイム ゾーン オフセットを加算するか、減算するかを示します。 タイム ゾーン オフセットの有効範囲は -14:00 ~ +14:00 までです。

ANSI および ISO 8601 への準拠

date は、グレゴリオ暦に対する ANSI SQL 標準の定義に準拠しています。「注記 85: Datetime データ型は、グレゴリオ形式の日付を、0001– 01–01 CE ~ 9999–12–31 CE の日付範囲で格納する。」

下位クライアント用の既定の文字列リテラル形式は、SQL 標準形式 (YYYY-MM-DD) に準拠します。 この形式は、DATE に対する ISO 8601 の定義と同じです。

下位クライアントの下位互換性

一部の下位クライアントは、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)」を参照してください。

日付の他の日付/時刻データ型への変換

次の表では、date データ型が他の日付/時刻データ型に変換される場合の処理について説明します。

変換先のデータ型

変換の詳細

time(n)

変換に失敗し、次のエラー メッセージ 206 が発生します。「オペランド型の不整合。date は time と互換性がありません」。

datetime

日付がコピーされ、時刻部分が 00:00:00.000 に設定されます。 次のコードは、date 値を datetime 値に変換した結果を示しています。

DECLARE @date date= '12-10-25';
DECLARE @datetime datetime= @date;
SELECT @date AS '@date', @datetime AS '@datetime';
--Result
--@date      @datetime
------------ -----------------------
--2025-12-10 2025-12-10 00:00:00.000
--
--(1 row(s) affected)

smalldatetime

date 値が smalldatetime の範囲内にある場合は、日付部分がコピーされ、時刻部分が 00:00:00 に設定されます。 date 値が smalldatetime 値の範囲外の場合は、次のエラー メッセージ 242 が発生します。「date データ型から smalldatetime データ型への変換結果が範囲外値になります。smalldatetime 値は NULL に設定されます。

次のコードは、date 値を smalldatetime 値に変換した結果を示しています。

DECLARE @date date= '1912-10-25';
DECLARE @smalldatetime smalldatetime = @date;
SELECT @date AS '@date', @smalldatetime AS '@smalldatetime';
--Result
--@date      @smalldatetime
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00
--
--(1 row(s) affected)

datetimeoffset(n)

日付がコピーされ、時刻が 00:00.0000000 +00:00 に設定されます。

次のコードは、date 値を datetimeoffset(3) 値に変換した結果を示しています。

DECLARE @date date = '1912-10-25';
DECLARE @datetimeoffset datetimeoffset(3) = @date;
SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset';
--Result
--@date      @datetimeoffset
------------ ------------------------------
--1912-10-25 1912-10-25 00:00:00.000 +00:00
--
--(1 row(s) affected)

datetime2(n)

日付部分がコピーされ、(n) の値に関係なく時刻部分が 00:00:00.00 に設定されます。

次のコードは、date 値を datetime2(3) 値に変換した結果を示しています。

DECLARE @date date = '1912-10-25';
DECLARE @datetime2 datetime2(3) = @date;
SELECT @date AS '@date', @datetime2 AS '@datetime2(3)';
--Result
--@date      @datetime2(3)
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00.00
--
--(1 row(s) affected)

文字列リテラルの日付への変換

文字列リテラルから日付/時刻データ型への変換は、文字列のすべての部分が有効な形式になっている場合に可能になります。 それ以外の場合は実行時エラーが発生します。 日付/時刻データ型から文字列リテラルへの暗黙的な変換や、スタイルを指定しない明示的な変換では、現在のセッションの既定の形式が使用されます。 次の表に、文字列リテラルを date データ型に変換する規則を示します。

入力文字列リテラル

date

ODBC 日付

ODBC 文字列リテラルは、datetime データ型にマップされます。 ODBC 日付時刻リテラルから date 型への代入演算を行うと、datetime 型とこれらの型との間で、変換規則で定義されている暗黙的な変換が行われます。

ODBC 時刻

上記の ODBC 日付の規則を参照。

ODBC 日付時刻

上記の ODBC 日付の規則を参照。

日付のみ

単純変換

時刻のみ

既定値が設定される

タイム ゾーンのみ

既定値が設定される

日付 + 時刻

入力文字列の日付部分が使用される

日付 + タイム ゾーン

使用不可

時刻 + タイム ゾーン

既定値が設定される

日付 + 時刻 + タイム ゾーン

ローカル datetime の日付部分が使用される

使用例

次の例では、文字列をそれぞれの日付および時刻データ型にキャストした結果を比較します。

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

関連項目

参照

CAST および CONVERT (Transact-SQL)