date (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース はいAzure SQL Managed Instance はいAzure Synapse Analytics はいParallel Data Warehouse

SQL Server で日付を定義します。

date の説明

プロパティ
構文 date
使用法 DECLARE @MyDate date

CREATE TABLE Table1 ( Column1 date )
既定の文字列リテラル形式

(下位クライアントに使用)
YYYY-MM-DD

詳細については、後述の「下位クライアントの下位互換性」セクションを参照してください。
Range 0001-01-01 ~ 9999-12-31 (Informatica の場合は 1582-10-15 ~ 9999-12-31)

1 年 1 月 1 日 CE (Common Era) から 9999 年 12 月 31 日 CE (Informatica の場合は 1582 年 10 月 15 日 CE から 9999 年 12 月 31 日 CE)
要素範囲 YYYY は、0001 ~ 9999 の年を表す 4 桁の数字です。 Informatica では、YYYY は 1582 ~ 9999 の範囲に制限されます。

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

DD は、指定された月の (月に応じて) 01 から 31 の日を表す 2 桁の数字です。
文字長 10 文字
有効桁数、小数点以下桁数 10, 0
ストレージ サイズ 3 バイト、固定
ストレージ構造 1 つの 3 バイト整数で日付を格納します。
精度 1 日
既定値 1900-01-01

この値は、time から datetime2 または datetimeoffset への暗黙的な変換で、付加的な日付要素として使用されます。
Calendar グレゴリオ暦
ユーザー定義の 1 秒未満の秒の有効桁数 いいえ
タイム ゾーン オフセットへの対応と保持 いいえ
夏時間への対応 いいえ

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 サーバー構成オプションの構成」を使用します。

メモ Informatica では、YYYY は 1582 ~ 9999 の範囲に制限されます。

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]

mon yyyy [dd]

[dd] mon[,] yyyy

dd mon[,][yy]yy

dd [yy]yy mon

[dd] yyyy mon

yyyy mon [dd]

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

こうしたあいまいさを排除するため、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 固有です。
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 標準の定義に準拠します。「NOTE 85 - Datetime data types will allow dates in the Gregorian format to be stored in the date range 0001-01-01 CE through 9999-12-31 CE.」(注 85 - Datetime データ型は、日付の範囲 0001-01-01 CE から 9999-12-31 で格納される、グレゴリオ形式の日付を許可します。)

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

注意

Informatica の場合、範囲は 1582-10-15 (1582 年 10 月 15 日 CE) から 9999-12-31 (9999 年 12 月 31 日 CE) に制限されます。

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

一部の下位レベル クライアントは、timedatedatetime2datetimeoffset データ型をサポートしていません。 SQL Server の上位インスタンスと下位クライアントの間のデータ型マッピングを次の表に示します。

SQL Server のデータ型 下位クライアントに渡される既定の文字列リテラル形式 下位 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

日付と時刻のデータ型の変換

日付と時刻のデータ型に変換する場合、SQL Server で日付または時刻と認識されない値はすべて拒否されます。 CAST 関数および CONVERT 関数で日付と時刻のデータを使用する方法については、「CAST および CONVERT (Transact-SQL)」をご覧ください。

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

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

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

datetime に変換する場合は、日付がコピーされます。 次のコードは、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.000 に設定されます。 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) への変換では、日付部分がコピーされ、時刻部分が 00:00.000000 に設定されます。 次のコードは、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.000  
--  
--(1 row(s) affected)  

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

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

入力文字列リテラル date
ODBC DATE ODBC 文字列リテラルは、datetime データ型にマップされます。 ODBC 日付時刻リテラルから date 型への代入演算を行うと、datetime 型とこれらの型との間で、変換規則で定義されている暗黙的な変換が行われます。
ODBC TIME 上記の ODBC 日付の規則を参照。
ODBC DATETIME 上記の ODBC 日付の規則を参照。
DATE のみ 単純変換
TIME のみ 既定値が指定されます。
タイム ゾーンのみ 既定値が指定されます。
DATE + TIME 入力文字列の日付部分が使用される
DATE + TIMEZONE 許可されていません。
TIME + TIMEZONE 既定値が指定されます。
DATE + TIME + TIMEZONE ローカル DATETIME の DATE 部分が使用されます。

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

SQL Server 2008 で初めて導入されました。

関連項目

CAST および CONVERT (Transact-SQL)