date (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric Warehouse Microsoft Fabric SQL Database
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 は、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 データ型の有効な文字列リテラル形式を示しています。
[m]m
、dd
、[yy]yy
は、スラッシュ (/
)、ハイフン (-
)、またはピリオド (.
) で区切られた文字列の月、日、および年を表します。
4 桁または 2 桁の年だけがサポートされています。 可能な限り 4 桁の年を使用してください。 2 桁の年を 4 桁の年として解釈するためのカットオフ年を表す 0001
から 9999
までの整数を指定するには、 2 桁の年のカットオフ サーバー構成オプションを使用します。
Informatica の場合、 yyyy
は 1582
から 9999
までの範囲に制限されます。
2 桁の西暦が、終了年の末尾の 2 桁の数値以下である場合は、終了年と同じ世紀として解釈されます。 終了年の末尾の 2 桁の数値よりも大きい場合は、終了年の 1 つ前の世紀と解釈されます。 たとえば、two-digit year cutoff が規定値の 2049
である場合、2 桁表記が 49
であれば、2049
年と解釈されます。2 桁表記が 50
であれば、1950
年と解釈されます。
既定の日付形式は、現在の言語設定によって決まります。 日付形式は、SET LANGUAGE ステートメントおよび SET DATEFORMAT ステートメントを使って変更できます。
日付では、ydm
形式はサポートされません。
月の日の年の文字列リテラル形式
SET DATEFORMAT mdy;
[m]m/dd/[yy]yy
[m]m-dd-[yy]yy
月の年の日の文字列リテラル形式
SET DATEFORMAT myd;
[m]m/[yy]yy/dd
[m]m-[yy]yy-dd
[m]m.[yy]yy.dd
日/月/年の文字列リテラル形式
SET DATEFORMAT dmy;
dd/[m]m/[yy]yy
dd-[m]m-[yy]yy
dd.[m]m.[yy]yy
年 1 か月の文字列リテラル形式
SET DATEFORMAT dym;
dd/[yy]yy/[m]m
dd-[yy]yy-[m]m
dd.[yy]yy.[m]m
年月日の文字列リテラル形式
SET DATEFORMAT ymd;
[yy]yy/[m]m/dd
[yy]yy-[m]m-dd
[yy]yy-[m]m-dd
形式のアルファベット順の一覧
[dd] mon[,] yyyy
dd mon[,][yy]yy
dd [yy]yy mon
[dd] yyyy mon
mon [dd][,] yyyy
mon dd[,] [yy]
mon yyyy [dd]
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 標準の定義に準拠します。
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) に制限されます。
下位クライアントの下位互換性
一部の下位レベル クライアントは、time、date、datetime2、datetimeoffset データ型をサポートしていません。 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を参照してください。
日付から他の日付/時刻データ型への変換
ここでは、date データ型を他の日付/時刻データ型に変換する場合の処理について説明します。
time(n) に変換すると、変換は失敗し、エラー メッセージ 206 が発生します。
オペランド型の不整合: 日付は時刻と互換性がありません
datetime に変換する場合は、日付部分コピーされます。 次のコードは、日付値を datetime 値に変換した結果を示しています。
DECLARE @date AS DATE = '12-10-25';
DECLARE @datetime AS 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 AS DATE = '1912-10-25';
DECLARE @smalldatetime AS 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 AS DATE = '1912-10-25';
DECLARE @datetimeoffset AS 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 AS DATE = '1912-10-25';
DECLARE @datetime2 AS 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 データ型に変換する規則を示します。
入力文字列リテラル | 日付 |
---|---|
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 |