date (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

SQL Server で日付を定義します。 日付データ型は SQL Server 2008 (10.0.x) で導入されました。

date の説明

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

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

(下位クライアントに使用)
yyyy-MM-dd

詳細については、「下位クライアントの下位互換性」セクションを参照してください。
範囲 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 は、00019999 の年を表す 4 桁の数字です。 Informatica では yyyy の範囲を 1582 から 9999 に制限されています。

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

dd は、指定された月の (月に応じて) 0131 の日を表す 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]mdd[yy]yy は、スラッシュ (/)、ハイフン (-)、またはピリオド (.) で区切られた文字列の月、日、および年を表します。

4 桁または 2 桁の年だけがサポートされています。 可能な限り 4 桁の年を使用してください。 2 桁の年を 4 桁の西暦年として解釈する場合に、基準になる年を 00019999 の範囲の整数で指定するには、「Two digit year cutoff」サーバー構成オプションを使用します。

注: Informatica では、yyyy1582 から 9999 の範囲に制限されます。

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

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

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

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

日を省略したときは、その月の 1 日が指定されます。
ISO 8601 説明
yyyy-MM-dd

yyyyMMdd
SQL 標準と同じです。 この形式は、国際標準として定義されている唯一の形式です。
区切りなし 説明
[yy]yyMMdd

yyyy[MMdd]
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 標準の定義に準拠します。

注 85 - Datetime データ型は、日付の範囲 0001-01-01 CE から 9999-12-31 CE で格納される、グレゴリオ形式の日付を許可します。

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

Note

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] [+ or -]hh:mm SQL_WVARCHAR または SQL_VARCHAR DBTYPE_WSTR または DBTYPE_STR Java.sql.String String または SqString

日付と時刻のデータを変換する

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

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

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

time(n) に変換すると、変換は失敗し、エラー メッセージ 206 が発生します。

オペランド型の不整合: 日付は時刻と互換性がありません

datetime に変換する場合は、日付部分コピーされます。 次のコードは、日付値を datetime 値に変換した結果を示しています。

DECLARE @date DATE = '12-10-25';
DECLARE @datetime DATETIME = @date;

SELECT @date AS '@date',
    @datetime AS '@datetime';

結果セットは次のようになります。

@date      @datetime
---------- -----------------------
2025-12-10 2025-12-10 00:00:00.000

smalldatetime への変換では、日付の値が smalldatetime の範囲内にある場合は、日付部分がコピーされ、時刻部分が 00:00:00.000 に設定されます。 日付値が smalldatetime 値の範囲外にある場合、エラー メッセージ 242 が発生し、smalldatetime 値が NULL に設定されます。

日付 データ型から smalldatetime データ型への変換の結果、範囲外の値になりました。

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

DECLARE @date DATE = '1912-10-25';
DECLARE @smalldatetime SMALLDATETIME = @date;

SELECT @date AS '@date',
    @smalldatetime AS '@smalldatetime';

結果セットは次のようになります。

@date      @smalldatetime
---------- -------------------
1912-10-25 1912-10-25 00:00:00

datetimeoffset(n) への変換の場合は、日付がコピーされ、時刻が 00:00.0000000 +00:00 に設定されます。 次のコードは、日付 値を datetimeoffset(3) 値に変換した結果を示しています。

DECLARE @date DATE = '1912-10-25';
DECLARE @datetimeoffset DATETIMEOFFSET(3) = @date;

SELECT @date AS '@date',
    @datetimeoffset AS '@datetimeoffset';

結果セットは次のようになります。

@date      @datetimeoffset
---------- ------------------------------
1912-10-25 1912-10-25 00:00:00.000 +00:00

datetime2(n) への変換では、日付部分がコピーされ、時刻部分が 00:00.000000 に設定されます。 次のコードは、日付値を datetime2(3) 値に変換した結果を示しています。

DECLARE @date DATE = '1912-10-25'
DECLARE @datetime2 DATETIME2(3) = @date;

SELECT @date AS '@date',
    @datetime2 AS '@datetime2(3)';

結果セットは次のようになります。

@date      @datetime2(3)
---------- -----------------------
1912-10-25 1912-10-25 00:00:00.000

文字列リテラルを日付に変換する

文字列リテラルから日付/時刻データ型への変換は、文字列のすべての部分が有効な形式になっている場合に可能になります。 それ以外の場合は実行時エラーが発生します。 日付/時刻データ型から文字列リテラルへの暗黙的な変換や、スタイルを指定しない明示的な変換では、現在のセッションの既定の形式が使用されます。 次の表では、文字列リテラルを 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 および time データ型にキャストした結果を比較します。

SELECT
    CAST('2022-05-08 12:35:29.1234567 +12:15' AS TIME(7)) AS 'time',
    CAST('2022-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
    CAST('2022-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
    CAST('2022-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
    CAST('2022-05-08 12:35:29.1234567 +12:15' AS DATETIME2(7)) AS 'datetime2',
    CAST('2022-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET(7)) AS 'datetimeoffset';

結果セットは次のようになります。

データ型 出力
time 12:35:29.1234567
date 2022-05-08
smalldatetime 2022-05-08 12:35:00
datetime 2022-05-08 12:35:29.123
datetime2 2022-05-08 12:35:29.1234567
datetimeoffset 2022-05-08 12:35:29.1234567 +12:15

関連項目