datetime (Transact-SQL)
適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
24 時間形式の時刻 (1 秒未満の秒を含む) と組み合わせた日付を定義します。
新しい作業には datetime を使用しないでください。 代わりに、時刻、日付、datetime2、および datetimeoffset データ型を使用します。 これらの型は SQL Standard と一致し、移植性が高くなります。 time、datetime2、datetimeoffset は秒の有効桁数が増えています。 datetimeoffset グローバルに配置されるアプリケーション向けにタイム ゾーンのサポートを提供します。
説明
プロパティ | 値 |
---|---|
構文 | DATETIME |
使用方法 | DECLARE @MyDatetime DATETIME; CREATE TABLE Table1 (Column1 DATETIME); |
既定の文字列リテラル形式 (下位レベルのクライアントに使用) | 適用なし |
日付範囲 | 1753-01-01 (1753 年 1 月 1 日) ~ 9999-12-31 (9999 年 12 月 31 日) |
時間範囲 | 00:00:00 から 23:59:59.997 |
タイム ゾーン オフセット範囲 | なし |
要素範囲 | yyyy は 1 年を表す 4 桁の数字1753 9999 です。MM は、指定した年の月を01 12 表す 2 桁の数字です。dd は、指定した月の日を01 31 表す月に応じて、2 桁の数字です。HH は、時間を00 23 表す 2 桁の数字です。mm は、分を00 59 表す 2 桁の数字です。ss は、2 番目を00 59 表す 2 桁の数字です。n* は、秒の小数部を0 999 表す 0 から 3 桁までの範囲の数字です。 |
文字の長さ | 19 文字以上、23 文字以下 |
ストレージ サイズ | 8 バイト |
精度 | 増分 、.000 .003 または.007 秒に丸められます |
既定値 | 1900-01-01 00:00:00 |
Calendar | グレゴリオ暦 (年の完全な範囲を含む) |
ユーザー定義の秒の小数部の有効桁数 | いいえ |
タイム ゾーン オフセットの認識と保持 | いいえ |
夏時間に対応 | いいえ |
datetime でサポートされる文字列リテラル形式
次の表は、datetime でサポートされている文字列リテラル形式を一覧にしたものです。 ODBC を除き、datetime 文字列リテラルは単一引用符 () で囲まれています。'
たとえば、 'string_literaL'
環境がそうでない us_english
場合、文字列リテラルは Unicode 形式 N'string_literaL'
である必要があります。
数値形式
月名を数値で表して日付データを指定できます。 たとえば、 5/20/97
1997 年 5 月 20 日を表します。 数値の日付形式を使用する場合は、スラッシュ ()、ハイフン-
()、またはピリオド.
(/
) を区切り記号として使用する文字列で、月、日、年を指定します。 この文字列は、次の形式に従う必要があります。
<number separator number separator number [time] [time]>
言語が設定 us_english
されている場合、日付の既定の順序は mdy
(月、日、年) です。 日付順序は、SET DATEFORMAT ステートメントを使用して変更できます。
日付値の SET DATEFORMAT
解釈方法は、設定によって決まります。 順序が設定と一致しない場合、値は日付として解釈されません。 順序が正しくない日付は、範囲外または間違った値と誤って解釈される可能性があります。 たとえば、 12/10/08
設定に応じて DATEFORMAT
、6 つの日付のいずれかとして解釈できます。 4 桁の年は年と解釈されます。
日付の表示形式 | 注文 |
---|---|
[0]4/15/[19]96 |
mdy |
[0]4-15-[19]96 |
mdy |
[0]4.15.[19]96 |
mdy |
[0]4/[19]96/15 |
myd |
15/[0]4/[19]96 |
dmy |
15/[19]96/[0]4 |
dym |
[19]96/15/[0]4 |
ydm |
[19]96/[0]4/15 |
ymd |
時刻の形式 |
---|
14:30 |
14:30[:20:997] |
14:30[:20.9] |
4am |
4 PM |
アルファベット順の形式
月の正式名を使って日付データを指定できます。 たとえば、 April
現在の言語で指定されている月の Apr
省略形などです。 コンマは省略可能であり、大文字と小文字は無視されます。
アルファベット日付形式の使用に関するガイドラインを次に示します。
日付と時刻のデータを単一引用符 (
'
) で囲みます。 英語以外の言語の場合は、N''
角かっこで囲まれた文字は省略可能です。
年の最後の 2 桁のみを指定した場合、2 桁の年のカットオフ構成オプションの値の最後の 2 桁未満の値は、カットオフ年と同じ世紀になります。 値がこの構成オプションより大きいか、同じである場合、指定した西暦は基準になる年の世紀より前の世紀になります。 たとえば、2 桁の年のカットオフが
2050
(既定値) の25
場合は、次のように2025
解釈され50
、次のように1950
解釈されます。 こうしたあいまいさを排除するため、4 桁の西暦を使用してください。日を省略したときは、その月の 1 日が指定されます。
月をアルファベット順に指定した場合、セッション設定は
SET DATEFORMAT
適用されません。
アルファベット順 |
---|
Apr[il] [15][,] 1996 |
Apr[il] 15[,] [19]96 |
Apr[il] 1996 [15] |
[15] Apr[il][,] 1996 |
15 Apr[il][,][19]96 |
15 [19]96 apr[il] |
[15] 1996 apr[il] |
1996 APR[IL] [15] |
1996 [15] APR[IL] |
ISO 8601 形式です。
ISO 8601 形式を使用するには、形式で表示されるコロン ()、ピリオド (:
.
) など、T
各要素を形式で指定する必要があります。
秒の構成要素を示す角かっこは省略できます。 時の構成要素は 24 時間形式で指定します。 datetime T
値の時刻部分の開始を示します。
ISO 8601 形式を使用する利点は、明確な仕様を持つ国際標準である点です。 また、この形式は、または SET LANGUAGE 設定の影響をSET DATEFORMAT
受けません。
例 :
2004-05-23T14:25:10
2004-05-23T14:25:10.487
ISO 8601 |
---|
yyyy-MM-ddTHH:mm:ss[.mmm] |
yyyyMMdd[ HH:mm:ss[.mmm]] |
未設定の形式
この形式は ISO 8601 形式に似ていますが、日付区切り記号が含まれている点が異なります。
区切りなし |
---|
yyyyMMdd HH:mm:ss[.mmm] |
ODBC 形式
ODBC API では、タイムスタンプ データと呼び出す、ODBC において日付時刻値を表すエスケープ シーケンスを定義します。 この ODBC タイムスタンプ形式は、Microsoft OLE DB Provider for SQL Server でサポートされる OLE DB 言語定義 (DBGUID-SQL) でもサポートされます。 ADO、OLE DB、および ODBC ベースの API を使用しているアプリケーションでは、この ODBC タイムスタンプ形式を使用して日付/時刻を表すことができます。
ODBC タイムスタンプ エスケープ シーケンスの形式は次のとおりです。 { <literal_type> '<constant_value>' }
<literal_type>
はエスケープ シーケンスの型を指定します。 タイムスタンプには、次の 3 つの<literal_type>
指定子があります。d
= 日付のみt
= 時間のみts
= タイムスタンプ (時刻 + 日付)
<constant_value>
はエスケープ シーケンスの値です。<constant_value>
は、次<literal_type>
の各形式に従う必要があります。d
:yyyy-MM-dd
t
:hh:mm:ss[.fff]
ts
:yyyy-MM-dd HH:mm:ss[.fff]
ODBC |
---|
{ ts '1998-05-02 01:23:56.123' } |
{ d '1990-10-02' } |
{ t '13:33:41' } |
datetime における 1 秒未満の秒の有効桁数の丸め処理
datetime 値は、次の.000
.003
例に示すように、増分 、または.007
秒に丸められます。
SELECT '01/01/2024 23:59:59.999' AS [User-specified value],
CAST('01/01/2024 23:59:59.999' AS DATETIME) AS [System stored value]
UNION SELECT '01/01/2024 23:59:59.998', CAST('01/01/2024 23:59:59.998' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.997', CAST('01/01/2024 23:59:59.997' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.996', CAST('01/01/2024 23:59:59.996' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.995', CAST('01/01/2024 23:59:59.995' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.994', CAST('01/01/2024 23:59:59.994' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.993', CAST('01/01/2024 23:59:59.993' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.992', CAST('01/01/2024 23:59:59.992' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.991', CAST('01/01/2024 23:59:59.991' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.990', CAST('01/01/2024 23:59:59.990' AS DATETIME);
結果セットは次のようになります。
ユーザー指定の値 | システム格納値 |
---|---|
01/01/2024 23:59:59.999 |
2024-01-02 00:00:00.000 |
01/01/2024 23:59:59.998 01/01/2024 23:59:59.997 01/01/2024 23:59:59.996 01/01/2024 23:59:59.995 |
2024-01-01 23:59:59.997 |
01/01/2024 23:59:59.994 01/01/2024 23:59:59.993 01/01/2024 23:59:59.992 |
2024-01-01 23:59:59.993 |
01/01/2024 23:59:59.991 01/01/2024 23:59:59.990 |
2024-01-01 23:59:59.990 |
ANSI および ISO 8601 への準拠
datetime は ANSI または ISO 8601 に準拠していません。
日付と時刻のデータを変換する
日付と時刻のデータ型に変換すると、データベース エンジンは日付または時刻として認識できないすべての値を拒否します。 日付と時刻のデータで関数をCAST
CONVERT
使用する方法については、CAST および CONVERT を参照してください。
他の日付と時刻の型を datetime データ型に変換する
ここでは、他の日付/時刻データ型が datetime データ型に変換される場合の処理について説明します。
date からの変換では、年、月、日がコピーされます。 時間コンポーネントが に 00:00:00.000
設定されています。 次のコードは、DATE
値を DATETIME
値に変換した結果を示しています。
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
前の例では、リージョン固有の日付形式 (MM-DD-YY
) を使用しています。
DECLARE @date DATE = '12-21-16';
この例は、リージョンの形式と一致するように更新する必要があります。
ISO 8601 準拠の日付形式 (yyyy-MM-dd
) を使用して例を完成することもできます。 次に例を示します。
DECLARE @date DATE = '2016-12-21';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
変換が time(n) からの場合、時刻コンポーネントがコピーされ、日付コンポーネントが 1900-01-01
. time(n) 値の小数部の有効桁数が 3 桁より大きい場合、値は収まるように切り捨てられます。 次の例は、TIME(4)
値を DATETIME
値に変換した結果を示しています。
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 からの変換では、時と分がコピーされます。 秒と秒の小数部がに設定 0
されます。 次のコードは、SMALLDATETIME
値を DATETIME
値に変換した結果を示しています。
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) からの場合、日付と時刻のコンポーネントがコピーされます。 タイム ゾーンは切り捨てられます。 datetimeoffset(n) 値の小数部の有効桁数が 3 桁より大きい場合、値は切り捨てられます。 次の例は、DATETIMEOFFSET(4)
値を DATETIME
値に変換した結果を示しています。
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 +10:0
変換が datetime2(n) からの場合、日付と時刻がコピーされます。 datetime2(n) 値の小数部の有効桁数が 3 桁より大きい場合、値は切り捨てられます。 次の例は、DATETIME2(4)
値を DATETIME
値に変換した結果を示しています。
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 データ型にキャストした結果を比較します。
SELECT CAST('2024-05-08 12:35:29.1234567 +12:15' AS TIME(7)) AS 'time',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
CAST('2024-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST('2024-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIME2(7)) AS 'datetime2',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET(7)) AS 'datetimeoffset';
結果セットは次のようになります。
データ型 | 出力 |
---|---|
time |
12:35:29.1234567 |
date |
2024-05-08 |
smalldatetime |
2024-05-08 12:35:00 |
datetime |
2024-05-08 12:35:29.123 |
datetime2 |
2024-05-08 12:35:29.1234567 |
datetimeoffset |
2024-05-08 12:35:29.1234567 +12:15 |
関連するコンテンツ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示