date (Transact-SQL)
適用対象: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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 は、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 ステートメントを使って変更できます。 日付では、 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) に制限されます。
下位クライアントの下位互換性
一部の下位レベル クライアントは、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 (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 データ型に変換する規則を示します。
入力文字列リテラル | 日付 |
---|---|
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 |