この記事には、日時の変換例が含まれています 時間の値 SQLServerの値。
日時を変換するメリットの1つ 時間の値 つまり、ストレージサイズを8バイトから3、4、または5バイトに減らします(時間に使用する精度によって異なります)。 価値)。厳密に言えば、時間 精度を格納するために追加のバイトが使用されるため、4、5、または6バイトを使用します。
日時を変換する場合 時間の値 、値の時間部分のみがコピーされます。正確な結果は、時間に割り当てる秒の小数部の精度によって異なります。 。 時間のとき 精度が日時よりも低い 精度、小数秒は時間に合うように切り上げられます 精度。
日時 データ型の小数秒部分は最大3桁です。その精度は、.000、.003、または.007秒の増分に丸められます。
時間 一方、データ型では、0から7までの秒の小数部の精度を指定できます。これは、 time( n>を使用して実現されます。 ) 構文、ここで n は0から7までのスケールです。これを指定しない場合は7を使用し、100ナノ秒の精度を提供します。
例1-暗黙の変換
これは、日時間の暗黙的な変換の例です。 および時間 。
DECLARE @thedatetime datetime, @thetime time; SET @thedatetime = '2025-05-21 10:15:30.123'; SET @thetime = @thedatetime; SELECT @thedatetime AS 'datetime', @thetime AS 'time';
結果:
+-------------------------+------------------+ | datetime | time | |-------------------------+------------------| | 2025-05-21 10:15:30.123 | 10:15:30.1233333 | +-------------------------+------------------+
明示的に変換するために変換関数(以下のような)を使用していないため、これは暗黙的な変換です。この場合、 datetime を割り当てようとすると、SQLServerはバックグラウンドで暗黙的な変換を実行します。 時間の値 変数。
この結果で最も明白なことは、時間 値には日付は含まれません。 時間なので、これは予想されることです。 データ型は、日付値ではなく、時刻値を格納するためだけのものです。
時間もわかります 変数の秒の小数部の精度が高くなり、最終的に 1233333 の小数部になります。 (vs 123 日時の場合 価値)。これは、時間が原因で発生します valueはデフォルトのスケール7を使用しています(スケールを明示的に指定しなかったため)。
例2–丸め
日時 データ型は、.000、.003、または.007秒の増分に丸められます。明示的に別の値に設定しても丸められます。
次に例を示します:
DECLARE @thedatetime datetime, @thetime time; SET @thedatetime = '2025-05-21 10:15:30.125'; SET @thetime = @thedatetime; SELECT @thedatetime AS 'datetime', @thetime AS 'thetime';
結果:
+-------------------------+------------------+ | datetime | thetime | |-------------------------+------------------| | 2025-05-21 10:15:30.127 | 10:15:30.1266667 | +-------------------------+------------------+
この例では、小数秒を125
に設定しました。 ただし、日時
127
に切り上げました (.000、.003、または.007秒の増分にのみ丸めることができるため)。
時間 ただし、値は小数秒を 1266667 に設定します 。
初期値を時間に設定するだけの場合 そもそも、その小数部分は 1250000 を返していたでしょう。 。
例3–精度/精度
前述のように、時間 データ型を使用すると、秒の小数部の精度を指定できます。これを行わない場合は、7を使用します(したがって、前の例では7を使用します)。
これは、 time( n>を使用して変更できます。 ) 構文。したがって、 time(7)を使用できたはずです。 前の例で同じ結果を得るには。
この例では、 time(0)を使用して、秒の小数部を完全に削除します。 :
DECLARE @thedatetime datetime, @thetime time(0); SET @thedatetime = '2025-05-21 10:15:30.125'; SET @thetime = @thedatetime; SELECT @thedatetime AS 'datetime', @thetime AS 'time';
結果:
+-------------------------+----------+ | datetime | time | |-------------------------+----------| | 2025-05-21 10:15:30.127 | 10:15:30 | +-------------------------+----------+
これを行うと、時間のストレージサイズ datetime の値が8バイトであるのに対し、値は3バイト(精度を含めて4バイト)に削減されます。 価値。
元の値よりも低い精度を使用すると、指定された精度に合うように結果が切り上げられることに注意してください。
例:
DECLARE @thedatetime datetime, @thetime time(0); SET @thedatetime = '2025-05-21 10:15:30.525'; SET @thetime = @thedatetime; SELECT @thedatetime AS 'datetime', @thetime AS 'time';
結果:
+-------------------------+----------+ | datetime | time | |-------------------------+----------| | 2025-05-21 10:15:30.527 | 10:15:31 | +-------------------------+----------+
例4– CAST()を使用した明示的な変換
明示的な変換の例を次に示します。この場合、私はCAST()
を使用します SELECT
内で直接機能します 日時間で明示的に変換するステートメント および時間 。
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CAST(@thedatetime AS time(0)) AS 'time(0)';
結果:
+-------------------------+-----------+ | datetime | time(0) | |-------------------------+-----------| | 2025-05-21 10:15:30.127 | 10:15:30 | +-------------------------+-----------+
例5– CONVERT()を使用した明示的な変換
CONVERT()
を使用した明示的な変換の例を次に示します。 CAST()
の代わりに関数 。
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CONVERT(time(0), @thedatetime) AS 'time(0)';
結果:
+-------------------------+-----------+ | datetime | time(0) | |-------------------------+-----------| | 2025-05-21 10:15:30.127 | 10:15:30 | +-------------------------+-----------+