datetime (Transact-SQL)datetime (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

24 時間形式の時刻 (1 秒未満の秒を含む) と組み合わせた日付を定義します。Defines a date that is combined with a time of day with fractional seconds that is based on a 24-hour clock.


使用して、 time, 、date, 、datetime2datetimeoffset 新しい作業のデータ型。Use the time, date, datetime2 and datetimeoffset data types for new work. これらの型は、SQL 標準に準拠しています。These types align with the SQL Standard. これらの型は、移植性がより高いです。They are more portable. timedatetime2datetimeoffset は秒の有効桁数が増えています。time, datetime2 and datetimeoffset provide more seconds precision. datetimeoffset グローバルに配置されるアプリケーション向けにタイム ゾーンのサポートを提供します。datetimeoffset provides time zone support for globally deployed applications.

datetime の説明datetime Description

プロパティProperty [値]Value
構文Syntax datetimedatetime
使用方法Usage DECLARE @MyDatetime datetimeDECLARE @MyDatetime datetime

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

(下位クライアントに使用)(used for down-level client)
適用なしNot applicable
日付範囲Date range 1753 年 1 月 1 日~ 9999 年 12 月 31 日January 1, 1753, through December 31, 9999
時間の範囲Time range 00:00:00 から 23:59:59.99700:00:00 through 23:59:59.997
タイム ゾーンのオフセット範囲Time zone offset range なしNone
要素範囲Element ranges YYYY は、年を表す 1753 から 9999 の 4 桁の数字です。YYYY is four digits from 1753 through 9999 that represent a year.

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

DD は、指定された月の (月に応じて) 01 ~ 31 の日を表す 2 桁の数字です。DD is two digits, ranging from 01 to 31 depending on the month, that represent a day of the specified month.

hh は、00 ~ 23 の時を表す 2 桁の数字です。hh is two digits, ranging from 00 to 23, that represent the hour.

mm は、分を表す 00 から 59 の 2 桁の数字です。mm is two digits, ranging from 00 to 59, that represent the minute.

ss は、秒を表す 00 から 59 の 2 桁の数字です。ss is two digits, ranging from 00 to 59, that represent the second.

n* は、秒の有効桁数を表す 3 桁の数字です (0 から 999)。n* is zero to three digits, ranging from 0 to 999, that represent the fractional seconds.
文字長Character length 19 文字以上、23 文字以下19 positions minimum to 23 maximum
ストレージ サイズStorage size 8 バイト8 bytes
精度Accuracy 値は、.000、.003、または .007 秒単位に丸められます。Rounded to increments of .000, .003, or .007 seconds
既定値Default value 1900-01-01 00:00:001900-01-01 00:00:00
カレンダーCalendar グレゴリオ暦 (完全な年の範囲は含まれません。)Gregorian (Does include the complete range of years.)
ユーザー定義の 1 秒未満の秒の有効桁数User-defined fractional second precision いいえNo
タイム ゾーン オフセットへの対応と保持Time zone offset aware and preservation いいえNo
夏時間への対応Daylight saving aware いいえNo

datetime でサポートされる文字列リテラル形式Supported String Literal Formats for datetime

次の表は、datetime でサポートされている文字列リテラル形式を一覧にしたものです。The following tables list the supported string literal formats for datetime. ODBC を除き、datetime の文字列リテラルは単一引用符 (') で囲んで指定します (例: 'string_literaL')。Except for ODBC, datetime string literals are in single quotation marks ('), for example, 'string_literaL'. us_english 以外の環境では、文字列リテラルを N'string_literaL' 形式で指定する必要があります。If the environment isn't us_english, the string literals should be in the format N'string_literaL'.

数値Numeric [説明]Description
日付形式 :Date formats:

[0]4/15/[19]96 -- (mdy)[0]4/15/[19]96 -- (mdy)

[0]4-15-[19]96 -- (mdy)[0]4-15-[19]96 -- (mdy)

[0]4.15.[19]96 -- (mdy)[0]4.15.[19]96 -- (mdy)

[0]4/[19]96/15 -- (myd)[0]4/[19]96/15 -- (myd)

15/[0]4/[19]96 -- (dmy)15/[0]4/[19]96 -- (dmy)

15/[19]96/[0]4 -- (dym)15/[19]96/[0]4 -- (dym)

[19]96/15/[0]4 -- (ydm)[19]96/15/[0]4 -- (ydm)

[19]96/[0]4/15 -- (ymd)[19]96/[0]4/15 -- (ymd)

時刻の形式:Time formats:





4 PM4 PM
月名を数値で表して日付データを指定できます。You can specify date data with a numeric month specified. たとえば、5/20/97 は 1997 年 5 月 20 日を表します。For example, 5/20/97 represents the twentieth day of May 1997. 数値データの形式を使用する場合、文字列の年、月、日は、スラッシュ (/)、ハイフン (-)、またはピリオド (.) で区切って指定します。When you use numeric date format, specify the month, day, and year in a string that uses slash marks (/), hyphens (-), or periods (.) as separators. この文字列は、次の形式に従う必要があります。This string must appear in the following form:

number separator number separator number [time] [time]number separator number separator number [time] [time]

言語設定が us_english の場合、既定の日付順序は月、日、年 (mdy) です。When the language is set to us_english, the default order for the date is mdy. 日付順序は、SET DATEFORMAT ステートメントを使用して変更できます。You can change the date order by using the SET DATEFORMAT statement.

SET DATEFORMAT の設定は、日付の値がどのように解釈されるかを決定します。The setting for SET DATEFORMAT determines how date values are interpreted. 順序が設定と一致しない場合、値は日付として解釈されません。If the order doesn't match the setting, the values aren't interpreted as dates. 日付が順序どおりでない場合、範囲外または不正な値に誤って解釈される可能性があります。Out-of-order dates may be misinterpreted as out of range or with wrong values. たとえば、12/10/08 は、DATEFORMAT の設定によっては、6 種類の日付形式のうちのいずれにも解釈できます。For example, 12/10/08 can be interpreted as one of six dates, depending on the DATEFORMAT setting. 4 桁の年は年と解釈されます。A four-part year is interpreted as the year.
アルファベットAlphabetical [説明]Description
Apr[il] [15][,] 1996Apr[il] [15][,] 1996

Apr[il] 15[,] [19]96Apr[il] 15[,] [19]96

Apr[il] 1996 [15]Apr[il] 1996 [15]

[15] Apr[il][,] 1996[15] Apr[il][,] 1996

15 Apr[il][,][19]9615 Apr[il][,][19]96

15 [19]96 apr[il]15 [19]96 apr[il]

[15] 1996 apr[il][15] 1996 apr[il]

1996 APR[IL] [15]1996 APR[IL] [15]

1996 [15] APR[IL]1996 [15] APR[IL]
月の正式名を使って日付データを指定できます。You can specify date data with a month specified as the full month name. たとえば、現在の言語で指定されている April やその省略形である Apr を使用できます。コンマは省略でき、大文字と小文字の違いは無視されます。For example, April or the month abbreviation of Apr specified in the current language; commas are optional and capitalization is ignored.

アルファベット日付形式の使用に関するガイドラインを次に示します。Here are some guidelines for using alphabetical date formats:

1) 日時データを単一引用符 (') で囲みます。1) Enclose the date and time data in single quotation marks ('). English 以外の言語では、N' を使用します。For languages other than English, use N'

2) 角かっこで囲まれた文字は省略可能です。2) Characters that are enclosed in brackets are optional.

3) 西暦の最後の 2 桁のみを指定した場合、その値が two digit year cutoff サーバー構成オプションの構成構成オプションの上限値の最後の 2 桁より小さければ、指定した西暦は終了年と同じ世紀になります。3) If you specify only the last two digits of the year, values less than the last two digits of the value of the Configure the two digit year cutoff Server Configuration Option configuration option are in the same century as the cutoff year. 値がこの構成オプションより大きいか、同じである場合、指定した西暦は基準になる年の世紀より前の世紀になります。Values greater than or equal to the value of this option are in the century that comes before the cutoff year. たとえば、two digit year cutoff が 2050 (既定値) である場合、25 は 2025 年と解釈され、50 は 1950 年と解釈されます。For example, if two digit year cutoff is 2050 (default), 25 is interpreted as 2025 and 50 is interpreted as 1950. こうしたあいまいさを排除するため、4 桁の西暦を使用してください。To avoid ambiguity, use four-digit years.

4) 日を省略したときは、その月の 1 日が指定されます。4) If the day is missing, the first day of the month is supplied.

月をアルファベット形式で指定したときは、SET DATEFORMAT のセッション設定は適用されません。The SET DATEFORMAT session setting isn't applied when you specify the month in alphabetical form.
ISO 8601ISO 8601 [説明]Description

YYYYMMDD[ hh:mm:ss[.mmm]]YYYYMMDD[ hh:mm:ss[.mmm]]
例 :Examples:

1) 2004-05-23T14:25:101) 2004-05-23T14:25:10

2) 2004-05-23T14:25:10.4872) 2004-05-23T14:25:10.487

ISO 8601 形式を使用する場合、各要素はこの形式で指定する必要があります。これには、形式にある T、コロン (:)、およびピリオド (.) を含みます。To use the ISO 8601 format, you must specify each element in the format, including the T, the colons (:), and the period (.) that are shown in the format.

秒の構成要素を示す角かっこは省略できます。The brackets indicate that the fraction of second component is optional. 時の構成要素は 24 時間形式で指定します。The time component is specified in the 24-hour format.

T は、datetime 値の時刻の部分の先頭を示します。The T indicates the start of the time part of the datetime value.

ISO 8601 形式を使用する利点は、これが明確な仕様を持つ国際標準であるという点です。The advantage in using the ISO 8601 format is that it is an international standard with unambiguous specification. また、この形式は、SET DATEFORMAT や SET LANGUAGE の設定の影響を受けません。Also, this format isn't affected by the SET DATEFORMAT or SET LANGUAGE setting.
区切りなしUnseparated [説明]Description
YYYYMMDD hh:mm:ss[.mmm]YYYYMMDD hh:mm:ss[.mmm]
ODBCODBC [説明]Description
{ ts '1998-05-02 01:23:56.123' }{ ts '1998-05-02 01:23:56.123' }

{ d '1990-10-02' }{ d '1990-10-02' }

{ t '13:33:41' }{ t '13:33:41' }
ODBC API では、タイムスタンプ データと呼び出す、ODBC において日付時刻値を表すエスケープ シーケンスを定義します。The ODBC API defines escape sequences to represent date and time values, which ODBC calls timestamp data. この ODBC タイムスタンプ形式は、MicrosoftMicrosoft OLE DB Provider for SQL ServerSQL Server でサポートされる OLE DB 言語定義 (DBGUID-SQL) でもサポートされます。This ODBC timestamp format is also supported by the OLE DB language definition (DBGUID-SQL) supported by the MicrosoftMicrosoft OLE DB provider for SQL ServerSQL Server. ADO、OLE DB、および ODBC ベースの API を使用しているアプリケーションでは、この ODBC タイムスタンプ形式を使用して日付/時刻を表すことができます。Applications that use the ADO, OLE DB, and ODBC-based APIs can use this ODBC timestamp format to represent dates and times.

ODBC タイムスタンプ エスケープ シーケンスは、{ literal_type 'constant_value' }: という形式です。ODBC timestamp escape sequences are of the format: { literal_type 'constant_value' }:

- literal_type はエスケープ シーケンスの種類を指定します。- literal_type specifies the type of the escape sequence. タイムスタンプには次の 3 つの literal_type 指定子があります。Timestamps have three literal_type specifiers:
1) d = 日付のみ1) d = date only
2) t = 時刻のみ2) t = time only
3) ts = タイムスタンプ (時刻と日付)3) ts = timestamp (time + date)

- 'constant_value' はエスケープ シーケンスの値です。- 'constant_value' is the value of the escape sequence. constant_valueliteral_type ごとに次の形式に従う必要があります。constant_value must follow these formats for each literal_type.
d : yyyy-mm-ddd : yyyy-mm-dd
t : hh:mm:ss[.fff]t : hh:mm:ss[.fff]
ts : yyyy-mm-dd hh:mm:ss[.fff]ts : yyyy-mm-dd hh:mm:ss[.fff]

datetime における 1 秒未満の秒の有効桁数の丸め処理Rounding of datetime Fractional Second Precision

以下の表に示すように、datetime 値は .000、.003、または .007 秒の単位になるように丸められます。datetime values are rounded to increments of .000, .003, or .007 seconds, as shown in the following table.

ユーザー指定の値User-specified value システム格納値System stored value
01/01/98 23:59:59.99901/01/98 23:59:59.999 1998-01-02 00:00:00.0001998-01-02 00:00:00.000
01/01/98 23:59:59.99501/01/98 23:59:59.995

01/01/98 23:59:59.99601/01/98 23:59:59.996

01/01/98 23:59:59.99701/01/98 23:59:59.997

01/01/98 23:59:59.99801/01/98 23:59:59.998
1998-01-01 23:59:59.9971998-01-01 23:59:59.997
01/01/98 23:59:59.99201/01/98 23:59:59.992

01/01/98 23:59:59.99301/01/98 23:59:59.993

01/01/98 23:59:59.99401/01/98 23:59:59.994
1998-01-01 23:59:59.9931998-01-01 23:59:59.993
01/01/98 23:59:59.99001/01/98 23:59:59.990

01/01/98 23:59:59.99101/01/98 23:59:59.991
1998-01-01 23:59:59.9901998-01-01 23:59:59.990

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

datetime は ANSI または ISO 8601 に準拠していません。datetime isn't ANSI or ISO 8601 compliant.

日付型データと時刻型データの変換Converting Date and Time Data

日付と時刻のデータ型に変換する場合、SQL ServerSQL Server で日付または時刻と認識できない値はすべて拒否されます。When you convert to date and time data types, SQL ServerSQL Server rejects all values it can'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).

他の日付/時刻型から datetime データ型からへの変換Converting Other Date and Time Types to the datetime Data Type

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

date からの変換では、年、月、日がコピーされます。When the conversion is from date, the year, month, and day are copied. 時刻部分は 00:00:00.000 に設定されます。The time component is set to 00:00:00.000. 次のコードは、date 値を datetime 値に変換した結果を示しています。The following code shows the results of converting a date value to a datetime value.

DECLARE @date date = '12-21-16';  
DECLARE @datetime datetime = @date;  
SELECT @datetime AS '@datetime', @date AS '@date';  
--@datetime               @date  
------------------------- ----------  
--2016-12-21 00:00:00.000 2016-12-21  

time(n) からの変換では、時刻部分がコピーされ、日付部分は "1900-01-01" に設定されます。When the conversion is from time(n), the time component is copied, and the date component is set to '1900-01-01'. time(n) 値の小数部の有効桁数が 3 桁を超える場合、値はその桁数に合わせて切り捨てられます。When the fractional precision of the time(n) value is greater than three digits, the value will be truncated to fit. 次の例は、time(4) 値を datetime 値に変換した結果を示しています。The following example shows the results of converting a time(4) value to a datetime value.

DECLARE @time time(4) = '12:10:05.1237';  
DECLARE @datetime datetime = @time;  
SELECT @datetime AS '@datetime', @time AS '@time';  
--@datetime               @time  
------------------------- -------------  
--1900-01-01 12:10:05.123 12:10:05.1237  

smalldatetime からの変換では、時と分がコピーされます。When the conversion is from smalldatetime, the hours and minutes are copied. 秒と秒の小数部は 0 に設定されます。The seconds and fractional seconds are set to 0. 次のコードは、smalldatetime 値を datetime 値に変換した結果を示しています。The following code shows the results of converting a smalldatetime value to a datetime value.

DECLARE @smalldatetime smalldatetime = '12-01-16 12:32';  
DECLARE @datetime datetime = @smalldatetime;  
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';  
--@datetime               @smalldatetime  
------------------------- -----------------------  
--2016-12-01 12:32:00.000 2016-12-01 12:32:00  

datetimeoffset(n) からの変換では、日付と時刻の部分がコピーされます。When the conversion is from datetimeoffset(n), the date and time components are copied. タイム ゾーンは切り捨てられます。The time zone is truncated. datetimeoffset(n) 値の小数部の有効桁数が 3 桁を超える場合、値は切り捨てられます。When the fractional precision of the datetimeoffset(n) value is greater than three digits, the value will be truncated. 次の例は、datetimeoffset(4) 値を datetime 値に変換した結果を示しています。The following example shows the results of converting a datetimeoffset(4) value to a datetime value.

DECLARE @datetimeoffset datetimeoffset(4) = '1968-10-23 12:45:37.1234 +10:0';  
DECLARE @datetime datetime = @datetimeoffset;  
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';  
--@datetime               @datetimeoffset  
------------------------- ------------------------------  
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +01:0   

datetime2(n) からの変換では、日付と時刻がコピーされます。When the conversion is from datetime2(n), the date and time are copied. datetime2(n) 値の小数部の有効桁数が 3 桁を超える場合、値は切り捨てられます。When the fractional precision of the datetime2(n) value is greater than three digits, the value will be truncated. 次の例は、datetime2(4) 値を datetime 値に変換した結果を示しています。The following example shows the results of converting a datetime2(4) value to a datetime value.

DECLARE @datetime2 datetime2(4) = '1968-10-23 12:45:37.1237';  
DECLARE @datetime datetime = @datetime2;  
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';  
--@datetime               @datetime2  
------------------------- ------------------------  
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237  


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

     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   
    ,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   
    ,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS   

結果セットは次のようになります。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)