この記事には、 datetime2の変換例が含まれています smalldatetimeの値 SQLServerの値。
datetime2を変換する利点の1つ smalldatetimeの値 つまり、ストレージサイズを7、8、または9バイトから4バイトに減らします。ただし、精度は失われます。
datetime2 データ型では、0から7までの秒の小数部の精度を指定できます。これを指定しない場合は、7(デフォルト)が使用されます。ゼロを指定した場合(0
)、その精度は最も近い秒になります。
smalldatetime 一方、データ型には小数秒がなく、その秒コンポーネントは常にゼロ(:00)に設定されます。その精度は最も近い分です。
datetime2を変換するとき smalldatetimeの値 、日付と時間部分の一部がコピーされます。秒コンポーネントはゼロに設定され(秒コンポーネントの元の値に関係なく)、時間は最も近い分に丸められます。分数秒は削除されます。
例1-暗黙の変換
datetime2間の暗黙的な変換の例を次に示します。 およびsmalldatetime 。
DECLARE @thedatetime2 datetime2, @thesmalldatetime smalldatetime; SET @thedatetime2 = '2025-05-21 10:15:30.1234567'; SET @thesmalldatetime = @thedatetime2; SELECT @thedatetime2 AS 'datetime2', @thesmalldatetime AS 'smalldatetime';
結果:
+-----------------------------+---------------------+ | datetime2 | smalldatetime | |-----------------------------+---------------------| | 2025-05-21 10:15:30.1234567 | 2025-05-21 10:16:00 | +-----------------------------+---------------------+
明示的に変換するために変換関数(以下のような)を使用していないため、これは暗黙的な変換です。この場合、 datetime2 を割り当てようとすると、SQLServerはバックグラウンドで暗黙的な変換を実行します。 smalldatetimeの値 変数。
この例では、 smalldatetime 値には小数秒が含まれず、秒はゼロに設定され、分は切り上げられています。
この場合、 datetime2 valueは7の精度を使用します。これは7がデフォルト値であるためです。精度を指定しなかったため、デフォルト値が使用されました。
しかし、私が選択した精度に関係なく、同じ結果が返されます。ゼロに減らしたとしても(つまり、datetime2(0)
として宣言したとしても )、それでも同じ結果が返されます。
例2– CAST()を使用した明示的な変換
明示的な変換の例を次に示します。この場合、私はCAST()
を使用します SELECT
内で直接機能します datetime2間で明示的に変換するステートメント およびsmalldatetime 。
DECLARE @thedatetime2 datetime2(0); SET @thedatetime2 = '2025-05-21 10:15:30'; SELECT @thedatetime2 AS 'datetime2', CAST(@thedatetime2 AS smalldatetime) AS 'smalldatetime';
結果:
+---------------------+---------------------+ | datetime2 | smalldatetime | |---------------------+---------------------| | 2025-05-21 10:15:30 | 2025-05-21 10:16:00 | +---------------------+---------------------+
この例では、 datetime2にゼロのスケールを使用することにしました。 値(つまり、datetime2(0)
)ただし、これは結果の smalldatetimeには影響しません。 値。
例3– CONVERT()を使用した明示的な変換
CONVERT()
を使用した明示的な変換の例を次に示します。 CAST()
の代わりに関数 。
DECLARE @thedatetime2 datetime2(0); SET @thedatetime2 = '2025-05-21 10:15:30'; SELECT @thedatetime2 AS 'datetime2', CONVERT(smalldatetime, @thedatetime2) AS 'smalldatetime';
結果:
+---------------------+---------------------+ | datetime2 | smalldatetime | |---------------------+---------------------| | 2025-05-21 10:15:30 | 2025-05-21 10:16:00 | +---------------------+---------------------+