次の方法で共有


日付(Transact-SQL)

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

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

日付の説明

Property Value
Syntax DATE
Usage 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 は、00019999 の年を表す 4 桁の数字です。 Informatica では yyyy の範囲を 1582 から 9999 に制限されています。

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

dd は、指定された月の (月に応じて) 0131 の日を表す 2 桁の数字です。
文字の長さ 10ポジション
精度、スケール 10, 0
ストレージ サイズ 3 バイト、固定
ストレージ構造 1 つの 3 バイト整数で日付を格納します。
Accuracy 1 日
既定値 1900-01-01

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

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

次の一覧は、 date データ型の有効な文字列リテラル形式を示しています。

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

4 桁または 2 桁の年だけがサポートされています。 可能な限り 4 桁の年を使用してください。 2 桁の年を 4 桁の年として解釈するためのカットオフ年を表す 0001 から 9999 までの整数を指定するには、 2 桁の年のカットオフ サーバー構成オプションを使用します。

Informatica の場合、 yyyy1582 から 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) に制限されます。

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

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

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

ここでは、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 データ型に変換する規則を示します。

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

Examples

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

結果セットは次のとおりです。

データの種類 Output
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