この記事には、日時の変換例が含まれています datetime2の値 SQLServerの値。
日時を変換する場合 datetime2の値 、結果の値は、 datetime2に割り当てる秒の小数部の精度によって異なります。 。
日時 データ型の小数秒部分は最大3桁です。その精度は、.000、.003、または.007秒の増分に丸められます。
datetime2 一方、データ型では、0から7までの秒の小数部の精度を指定できます。これを指定しない場合は、7(デフォルト)が使用されます。
例1-暗黙の変換
これは、日時間の暗黙的な変換の例です。 およびdatetime2 。
DECLARE @thedatetime datetime, @thedatetime2 datetime2; SET @thedatetime = '2025-05-21 10:15:30.123'; SET @thedatetime2 = @thedatetime; SELECT @thedatetime AS 'datetime', @thedatetime2 AS 'datetime2';
結果:
+-------------------------+-----------------------------+ | datetime | datetime2 | |-------------------------+-----------------------------| | 2025-05-21 10:15:30.123 | 2025-05-21 10:15:30.1233333 | +-------------------------+-----------------------------+
明示的に変換するために変換関数(以下のような)を使用していないため、これは暗黙的な変換です。この場合、 datetime を割り当てようとすると、SQLServerはバックグラウンドで暗黙的な変換を実行します。 datetime2の値 変数。
datetime2 変数の秒の小数部の精度が高くなり、最終的に 1233333 の小数部になります。 (vs 123 日時の場合 価値)。
例2–丸め
日時 データ型は、.000、.003、または.007秒の増分に丸められます。明示的に別の値に設定しても丸められます。ご想像のとおり、これがどのように機能するかを知らない場合、これは多くの混乱を引き起こす可能性があります。 datetime を使用すると、混乱を招く可能性があるだけではありません。 それ自体で、その値を別のデータ型に変換するときに余分な混乱を引き起こす可能性があります。
これが私の意味を示す例です。
DECLARE @thedatetime datetime, @thedatetime2 datetime2; SET @thedatetime = '2025-05-21 10:15:30.125'; SET @thedatetime2 = @thedatetime; SELECT @thedatetime AS 'datetime', @thedatetime2 AS 'datetime2';
結果:
+-------------------------+-----------------------------+ | datetime | datetime2 | |-------------------------+-----------------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.1266667 | +-------------------------+-----------------------------+
この例では、小数秒を125
に設定しました。 ただし、日時
127
に切り上げました (.000、.003、または.007秒の増分にのみ丸めることができるため)。
datetime2 ただし、値は小数秒を 1266667 に設定します 。
ちなみに、初期値を datetime2に設定するだけの場合 そもそも、その小数部分は 1250000 を返していたでしょう。 。
例3–精度/精度
datetime2の利点の1つ 分数秒の精度を指定できるということです。これを行わない場合は、7を使用します(したがって、前の例では7を使用します)。
したがって、前の例を変更して、 datetime2 値は、 datetimeと同じ秒単位の精度を使用します データ型。
DECLARE @thedatetime datetime, @thedatetime2 datetime2(3); SET @thedatetime = '2025-05-21 10:15:30.125'; SET @thedatetime2 = @thedatetime; SELECT @thedatetime AS 'datetime', @thedatetime2 AS 'datetime2';
結果:
+-------------------------+-------------------------+ | datetime | datetime2 | |-------------------------+-------------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.127 | +-------------------------+-------------------------+
これを行うと、 datetime2 valueは、 datetimeと同じ結果を返します 価値。また、同じ量のストレージ(8バイト)を使用します。この場合、 datetime2 値を格納するために7バイトを使用し、値の精度を格納するために1バイトを使用します。
lessを指定することもできます 日時よりも秒単位の精度 特別な精度が必要ない場合。これを行うと、ストレージスペース( datetime2 )を1バイト節約できます。 datetime の8バイトと比較して、値は7バイトを使用します 値)。
DECLARE @thedatetime datetime, @thedatetime2 datetime2(2); SET @thedatetime = '2025-05-21 10:15:30.125'; SET @thedatetime2 = @thedatetime; SELECT @thedatetime AS 'datetime', @thedatetime2 AS 'datetime2';
結果:
+-------------------------+------------------------+ | datetime | datetime2 | |-------------------------+------------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.13 | +-------------------------+------------------------+
これにより、秒の小数部が丸められる可能性があることに注意してください。
例4– CAST()を使用した明示的な変換
明示的な変換の例を次に示します。この場合、私はCAST()
を使用します SELECT
内で直接機能します 日時間で明示的に変換するステートメント およびdatetime2 。
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CAST(@thedatetime AS datetime2(3)) AS 'datetime2(3)';
結果:
+-------------------------+-------------------------+ | datetime | datetime2(3) | |-------------------------+-------------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.127 | +-------------------------+-------------------------+
例5– CONVERT()を使用した明示的な変換
CONVERT()
を使用した明示的な変換の例を次に示します。 CAST()
の代わりに関数 。
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CONVERT(datetime2(3), thedatetime) AS 'datetime2(3)';
結果:
+-------------------------+-------------------------+ | datetime | datetime2(3) | |-------------------------+-------------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:15:30.127 | +-------------------------+-------------------------+
Microsoftの推奨事項
これら2つのデータ型の間に混合比較シナリオが存在する場合は常に、明示的なキャストを使用することをお勧めします。
データベース互換性レベル130では、日時からの暗黙的な変換 datetime2 データ型は、ミリ秒の小数部を考慮することで精度が向上し、変換された値が異なります… datetime2への明示的なキャストを使用します 日時間の混合比較シナリオの場合は常にデータ型 およびdatetime2 データ型が存在します。