date (Transact-SQL)date (Transact-SQL)

適用対象: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

SQL ServerSQL Server で日付を定義します。Defines a date in SQL ServerSQL Server.

date の説明date description

プロパティProperty [値]Value
構文Syntax datedate
使用方法Usage DECLARE @MyDate dateDECLARE @MyDate date

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

(下位クライアントに使用)(used for down-level client)
YYYY-MM-DDYYYY-MM-DD

詳細については、後述の「下位クライアントの下位互換性」セクションを参照してください。For more information, see the "Backward Compatibility for Down-level Clients" section that follows.
範囲Range 0001-01-01 ~ 9999-12-31 (Informatica の場合は 1582-10-15 ~ 9999-12-31)0001-01-01 through 9999-12-31 (1582-10-15 through 9999-12-31 for Informatica)

1 年 1 月 1 日 CE (Common Era) から 9999 年 12 月 31 日 CE (Informatica の場合は 1582 年 10 月 15 日 CE から 9999 年 12 月 31 日 CE)January 1, 1 CE (Common Era) through December 31, 9999 CE (October 15, 1582 CE through December 31, 9999 CE for Informatica)
要素範囲Element ranges YYYY は、0001 ~ 9999 の年を表す 4 桁の数字です。YYYY is four digits from 0001 to 9999 that represent a year. Informatica では、YYYY は 1582 ~ 9999 の範囲に制限されます。For Informatica, YYYY is limited to the range 1582 to 9999.

MM は、指定された年の 01 ~ 12 の月を表す 2 桁の数字です。MM is two digits from 01 to 12 that represent a month in the specified year.

DD は、指定された月の (月に応じて) 01 から 31 の日を表す 2 桁の数字です。DD is two digits from 01 to 31, depending on the month, that represents a day of the specified month.
文字長Character length 10 文字10 positions
有効桁数、小数点以下桁数Precision, scale 10, 010, 0
ストレージ サイズStorage size 3 バイト、固定3 bytes, fixed
ストレージ構造Storage structure 1 つの 3 バイト整数で日付を格納します。1, 3-byte integer stores date.
精度Accuracy 1 日One day
既定値Default value 1900-01-011900-01-01

この値は、time から datetime2 または datetimeoffset への暗黙的な変換で、付加的な日付要素として使用されます。This value is used for the appended date part for implicit conversion from time to datetime2 or datetimeoffset.
カレンダーCalendar グレゴリオ暦Gregorian
ユーザー定義の 1 秒未満の秒の有効桁数User-defined fractional second precision いいえNo
タイム ゾーン オフセットへの対応と保持Time zone offset aware and preservation いいえNo
夏時間への対応Daylight saving aware いいえNo

date でサポートされる文字列リテラル形式Supported string literal formats for date

次の表は、date データ型に使用できる有効な文字列リテラル形式を示しています。The following tables show the valid string literal formats for the date data type.

数値Numeric [説明]Description
mdymdy

[m]m/dd/[yy]yy[m]m/dd/[yy]yy

[m]m-dd-[yy]yy[m]m-dd-[yy]yy

[m]m.dd.[yy]yy[m]m.dd.[yy]yy

mydmyd

mm/[yy]yy/ddmm/[yy]yy/dd

mm-[yy]yy/ddmm-[yy]yy/dd

[m]m.[yy]yy.dd[m]m.[yy]yy.dd

dmydmy

dd/[m]m/[yy]yydd/[m]m/[yy]yy

dd-[m]m-[yy]yydd-[m]m-[yy]yy

dd.[m]m.[yy]yydd.[m]m.[yy]yy

dymdym

dd/[yy]yy/[m]mdd/[yy]yy/[m]m

dd-[yy]yy-[m]mdd-[yy]yy-[m]m

dd.[yy]yy.[m]mdd.[yy]yy.[m]m

ymdymd

[yy]yy/[m]m/dd[yy]yy/[m]m/dd

[yy]yy-[m]m-dd[yy]yy-[m]m-dd

[yy]yy-[m]m-dd[yy]yy-[m]m-dd
[m]m、dd、および [yy]yy は、スラッシュ (/)、ハイフン (-)、またはピリオド (.) で区切られた文字列の月、日、および年を表します。[m]m, dd, and [yy]yy represent month, day, and year in a string with slash marks (/), hyphens (-), or periods (.) as separators.

4 桁または 2 桁の年だけがサポートされています。Only four- or two-digit years are supported. 可能な限り 4 桁の年を使用してください。Use four-digit years whenever possible. 2 桁の年を 4 桁の西暦年として解釈する場合に、基準になる年を 0001 ~ 9999 の範囲の整数で指定するには、「two digit year cutoff サーバー構成オプションの構成」を使用します。To specify an integer from 0001 to 9999 that represents the cutoff year for interpreting two-digit years as four-digit years, use the Configure the two digit year cutoff Server Configuration Option.

メモNote! Informatica では、YYYY は 1582 ~ 9999 の範囲に制限されます。For Informatica, YYYY is limited to the range 1582 to 9999.

2 桁の西暦が、終了年の末尾の 2 桁の数値以下である場合は、終了年と同じ世紀として解釈されます。A two-digit year that is less than or equal to the last two digits of the cutoff year is in the same century as the cutoff year. 終了年の末尾の 2 桁の数値よりも大きい場合は、終了年の 1 つ前の世紀と解釈されます。A two-digit year greater than the last two digits of the cutoff year is in the century that comes before the cutoff year. たとえば、two digit year cutoff が 2049 (既定値) である場合、2 桁表記が 49 であれば、2049 年と解釈されます。2 桁表記が 50 であれば、1950 年と解釈されます。For example, if the two-digit year cutoff is the default 2049, the two-digit year 49 is interpreted as 2049 and the two-digit year 50 is interpreted as 1950.

既定の日付形式は、現在の言語設定によって決まります。The default date format is determined by the current language setting. 日付形式は、SET LANGUAGE ステートメントおよび SET DATEFORMAT ステートメントを使って変更できます。You can change the date format by using the SET LANGUAGE and SET DATEFORMAT statements.

date では、ydm 形式はサポートされません。The ydm format isn't supported for date.
アルファベットAlphabetical [説明]Description
mon [dd][,] yyyymon [dd][,] yyyy

mon dd[,] [yymon dd[,] [yy

mon yyyy [dd]mon yyyy [dd]

[dd] mon[,] yyyy[dd] mon[,] yyyy

dd mon[,][yy]yydd mon[,][yy]yy

dd [yy]yy mondd [yy]yy mon

[dd] yyyy mon[dd] yyyy mon

yyyy mon [dd]yyyy mon [dd]

yyyy [dd] monyyyy [dd] mon
ydm は、現在の言語における月の正式名または省略形を表します。mon represents the full month name or the month abbreviation given in the current language. コンマは省略可能であり、大文字と小文字は無視されます。Commas are optional and capitalization is ignored.

こうしたあいまいさを排除するため、4 桁の西暦を使用してください。To avoid ambiguity, use four-digit years.

日を省略したときは、その月の 1 日が指定されます。If the day is missing, the first day of the month is supplied.
ISO 8601ISO 8601 [説明]Description
YYYY-MM-DDYYYY-MM-DD

YYYYMMDDYYYYMMDD
SQL 標準と同じです。Same as the SQL standard. この形式は、国際標準として定義されている唯一の形式です。This format is the only format defined as an international standard.
区切りなしUnseparated [説明]Description
[yy]yymmdd[yy]yymmdd

yyyy[mm][dd]yyyy[mm][dd]
date データは、4 桁、6 桁、または 8 桁で指定できます。The date data can be specified with four, six, or eight digits. 6 桁または 8 桁の文字列は、常に ymd と解釈されます。A six- or eight-digit string is always interpreted as ymd. 月と日は常に 2 桁です。The month and day must always be two digits. 4 桁の文字列は年として解釈されます。A four-digit string is interpreted as year.
ODBCODBC [説明]Description
{ d 'yyyy-mm-dd' }{ d 'yyyy-mm-dd' } ODBC API 固有です。ODBC API specific.
W3C XML 形式W3C XML format [説明]Description
yyyy-mm-ddTZDyyyy-mm-ddTZD XML/SOAP 用にサポートされています。Supported for XML/SOAP usage.

TZD は、タイム ゾーン指定子 (Z または +hh:mm または -hh:mm) です。TZD is the time zone designator (Z or +hh:mm or -hh:mm):

- hh:mm はタイム ゾーン オフセットを表します。- hh:mm represents the time zone offset. hh は、タイム ゾーン オフセットの時間数を表す 0 から 14 の 2 桁の数字です。hh is two digits, ranging from 0 to 14, that represent the number of hours in the time zone offset.
- MM は、タイム ゾーン オフセットの付加的な分数を表す 0 ~ 59 の 2 桁の数字です。- MM is two digits, ranging from 0 to 59, that represent the number of additional minutes in the time zone offset.
- タイム ゾーン オフセットでは、+ (正負号) または - (負符号) を必ず指定します。- + (plus) or - (minus) the mandatory sign of the time zone offset. この符号は、ローカル時刻を取得する際に、協定世界時 (UTC) の時刻を基準としてタイム ゾーン オフセットを加算するか、減算するかを示します。This sign indicates that, to obtain the local time, the time zone offset is added or subtracted from the Coordinated Universal Times (UTC) time. タイム ゾーン オフセットの有効範囲は -14:00 ~ +14:00 までです。The valid range of time zone offset is from -14:00 to +14:00.

ANSI および ISO 8601 への準拠ANSI and ISO 8601 compliance

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 で格納される、グレゴリオ形式の日付を許可します。)date complies with the ANSI SQL standard definition for the Gregorian calendar: "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."

下位クライアント用の既定の文字列リテラル形式は、SQL 標準形式 (YYYY-MM-DD) に準拠します。The default string literal format, which is used for down-level clients, complies with the SQL standard form that is defined as YYYY-MM-DD. この形式は、DATE に対する ISO 8601 の定義と同じです。This format is the same as the ISO 8601 definition for DATE.

注意

Informatica の場合、範囲は 1582-10-15 (1582 年 10 月 15 日 CE) から 9999-12-31 (9999 年 12 月 31 日 CE) に制限されます。For Informatica, the range is limited to 1582-10-15 (October 15, 1582 CE) to 9999-12-31 (December 31, 9999 CE).

下位クライアントの下位互換性Backward compatibility for down-level clients

一部の下位レベル クライアントは、timedatedatetime2datetimeoffset データ型をサポートしていません。Some down-level clients don't support the time, date, datetime2, and datetimeoffset data types. SQL ServerSQL Server の上位インスタンスと下位クライアントの間のデータ型マッピングを次の表に示します。The following table shows the type mapping between an up-level instance of SQL ServerSQL Server and down-level clients.

SQL ServerSQL Server のデータ型data type 下位クライアントに渡される既定の文字列リテラル形式Default string literal format passed to down-level client 下位 ODBCDown-level ODBC 下位 OLEDBDown-level OLEDB 下位 JDBCDown-level JDBC 下位 SQLCLIENTDown-level SQLCLIENT
timetime hh:mm:ss[.nnnnnnn]hh:mm:ss[.nnnnnnn] SQL_WVARCHAR または SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR または DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String または SqStringString or SqString
datedate YYYY-MM-DDYYYY-MM-DD SQL_WVARCHAR または SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR または DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String または SqStringString or SqString
datetime2datetime2 YYYY-MM-DD hh:mm:ss[.nnnnnnn]YYYY-MM-DD hh:mm:ss[.nnnnnnn] SQL_WVARCHAR または SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR または DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String または SqStringString or SqString
datetimeoffsetdatetimeoffset YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mmYYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm SQL_WVARCHAR または SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR または DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String String または SqStringString or SqString

日付と時刻のデータ型の変換Converting date and time data

日付と時刻のデータ型に変換する場合、SQL ServerSQL Server で日付または時刻と認識されない値はすべて拒否されます。When you convert to date and time data types, SQL ServerSQL Server rejects all values it doesn't recognize as dates or times. CAST 関数および CONVERT 関数で日付と時刻のデータを使用する方法については、「CAST および CONVERT (Transact-SQL)」をご覧ください。For information about using the CAST and CONVERT functions with date and time data, see CAST and CONVERT (Transact-SQL).

date から他の日付/時刻データ型への変換Converting date to other date and time types

ここでは、date データ型を他の日付/時刻データ型に変換する場合の処理について説明します。This section describes what occurs when you convert a date data type to other date and time data types.

time(n) に変換すると、変換は失敗し、エラー メッセージ 206"オペランド型の不整合: date は time と互換性がありません" が発生します。When the conversion is to time(n), the conversion fails, and error message 206 is raised: "Operand type clash: date is incompatible with time".

datetime に変換する場合は、日付がコピーされます。If the conversion is to datetime, date is copied. 次のコードは、date 値を datetime 値に変換した結果を示しています。The following code shows the results of converting a date value to a datetime value.

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 に設定されます。When the conversion is to smalldatetime, the date value is in the range of a smalldatetime, the date component is copied, and the time component is set to 00:00:00.000. date 値が smalldatetime 値の範囲外にある場合、エラー メッセージ 242"date データ型から smalldatetime データ型に変換すると、結果は範囲外の値になります。smalldatetime 値は NULL に設定されます。" が発生します。When the date value is outside the range of a smalldatetime value, error message 242 is raised: "The conversion of a date data type to a smalldatetime data types resulted in an out-of-range value."; and the smalldatetime value is set to NULL. 次のコードは、date 値を smalldatetime 値に変換した結果を示しています。The following code shows the results of converting a date value to a smalldatetime value.

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 に設定されます。For conversion to datetimeoffset(n), date is copied, and the time is set to 00:00.0000000 +00:00. 次のコードでは、date の値を datetimeoffset(3) の値に変換した結果を示します。The following code shows the results of converting a date value to a datetimeoffset(3) value.

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 に設定されます。When the conversion is to datetime2(n), the date component is copied, and the time component is set to 00:00.000000. 次のコードでは、date の値を datetime2(3) の値に変換した結果を示します。The following code shows the results of converting a date value to a datetime2(3) value.

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)  

文字列リテラルの日付への変換Converting string literals to date

文字列リテラルから日付/時刻データ型への変換は、文字列のすべての部分が有効な形式になっている場合に可能になります。Conversions from string literals to date and time types are allowed if all parts of the strings are in valid formats. それ以外の場合は実行時エラーが発生します。Otherwise, a runtime error is raised. 日付/時刻データ型から文字列リテラルへの暗黙的な変換や、スタイルを指定しない明示的な変換では、現在のセッションの既定の形式が使用されます。Implicit conversions or explicit conversions that don't specify a style, from date and time types to string literals will be in the default format of the current session. 次の表では、文字列リテラルを date データ型に変換する規則を示します。The following table shows the rules for converting a string literal to the date data type.

入力文字列リテラルInput string literal datedate
ODBC DATEODBC DATE ODBC 文字列リテラルは、datetime データ型にマップされます。ODBC string literals are mapped to the datetime data type. ODBC 日付時刻リテラルから date 型への代入演算を行うと、datetime 型とこれらの型との間で、変換規則で定義されている暗黙的な変換が行われます。Any assignment operation from ODBC DATETIME literals into a date type causes an implicit conversion between datetime and the type that the conversion rules define.
ODBC TIMEODBC TIME 上記の ODBC 日付の規則を参照。See previous ODBC DATE rule.
ODBC DATETIMEODBC DATETIME 上記の ODBC 日付の規則を参照。See previous ODBC DATE rule.
DATE のみDATE only 単純変換Trivial
TIME のみTIME only 既定値が指定されます。Default values are supplied.
タイム ゾーンのみTIMEZONE only 既定値が指定されます。Default values are supplied.
DATE + TIMEDATE + TIME 入力文字列の日付部分が使用されるThe DATE part of the input string is used.
DATE + TIMEZONEDATE + TIMEZONE 許可されていません。Not allowed.
TIME + TIMEZONETIME + TIMEZONE 既定値が指定されます。Default values are supplied.
DATE + TIME + TIMEZONEDATE + TIME + TIMEZONE ローカル DATETIME の DATE 部分が使用されます。The DATE part of local DATETIME will be used.

使用例Examples

次の例では、文字列をそれぞれの date および time データ型にキャストした結果を比較します。The following example compares the results of casting a string to each date and time data type.

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';  

結果セットは次のようになります。Here is the result set.

データ型Data type [出力]Output
timetime 12:35:29.12:35:29. 12345671234567
datedate 2007-05-082007-05-08
smalldatetimesmalldatetime 2007-05-08 12:35:002007-05-08 12:35:00
datetimedatetime 2007-05-08 12:35:29.1232007-05-08 12:35:29.123
datetime2datetime2 2007-05-08 12:35:29.2007-05-08 12:35:29. 12345671234567
datetimeoffsetdatetimeoffset 2007-05-08 12:35:29.1234567 +12:152007-05-08 12:35:29.1234567 +12:15

参照See also

CAST および CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)