この記事には、 smalldatetimeの変換例が含まれています datetime2の値 SQLServerの値。
smalldatetime データ型には小数秒がなく、その秒コンポーネントは常にゼロ(:00)に設定されます。その精度は最も近い分です。
datetime2 一方、データ型では、0〜7の小数秒の精度を指定できます。これを指定しない場合は、7(デフォルト)が使用されます。ゼロを指定した場合(0
)、その精度は最も近い秒になります。
smalldatetimeを変換するとき datetime2の値 、時間と分がコピーされます。秒と小数秒は0に設定されます。
例1-暗黙の変換
smalldatetime間の暗黙的な変換の例を次に示します。 およびdatetime2 。
DECLARE @thesmalldatetime smalldatetime, @thedatetime2 datetime2; SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime2 = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thedatetime2 AS 'datetime2';
結果:
+---------------------+-----------------------------+ | smalldatetime | datetime2 | |---------------------+-----------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.0000000 | +---------------------+-----------------------------+
明示的に変換するために変換関数(以下のような)を使用していないため、これは暗黙的な変換です。この場合、 smalldatetime を割り当てようとすると、SQLServerはバックグラウンドで暗黙的な変換を実行します。 datetime2の値 変数。
この例では、 smalldatetime 値には小数秒が含まれず、秒はゼロに設定され、分は切り上げられています。
この場合、 datetime2 valueは7の精度を使用します。これは7がデフォルト値であるためです。精度を指定しなかったため、デフォルト値が使用されました。これにより、小数部で7つのゼロが使用されます。
例2–小数部分を削除する
必要に応じて、小数秒を削除できます。これを行うには、datetime2(0)
を使用するだけです。 変数を宣言するとき。
DECLARE @thesmalldatetime smalldatetime, @thedatetime2 datetime2(0); SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime2 = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thedatetime2 AS 'datetime2';
結果:
+---------------------+---------------------+ | smalldatetime | datetime2 | |---------------------+---------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00 | +---------------------+---------------------+
したがって、この場合、両方のデータ型が同じ値を返します。ただし、違いは datetime2 ( smalldatetime と比較して)秒に正確さを提供する機能があります の分単位の精度)。
例:
DECLARE @thesmalldatetime smalldatetime, @thedatetime2 datetime2(0); SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime2 = @thesmalldatetime; SELECT DATEADD(second, 30, @thesmalldatetime) AS 'smalldatetime', DATEADD(second, 30, @thedatetime2) AS 'datetime2';
結果:
+---------------------+---------------------+ | smalldatetime | datetime2 | |---------------------+---------------------| | 2025-05-21 10:17:00 | 2025-05-21 10:16:30 | +---------------------+---------------------+
この例では、DATEADD()
を使用しました 各値に30秒を追加する関数。ただし、データ型ごとに異なる結果が返されます。 datetime2 データ型は秒の部分を尊重し、100%の精度で正しい結果を提供します。 smalldatetime 一方、タイプは、最も近い分に切り上げられます(秒の部分はゼロのままです)。
例3– CAST()を使用した明示的な変換
明示的な変換の例を次に示します。この場合、私はCAST()
を使用します SELECT
内で直接機能します smalldatetime間で明示的に変換するステートメント およびdatetime2 。
DECLARE @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SELECT @thesmalldatetime AS 'thesmalldatetime', CAST(@thesmalldatetime AS datetime2(0)) AS 'datetime2(0)';
結果:
+---------------------+---------------------+ | thesmalldatetime | datetime2(0) | |---------------------+---------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00 | +---------------------+---------------------+
例4– CONVERT()を使用した明示的な変換
CONVERT()
を使用した明示的な変換の例を次に示します。 CAST()
の代わりに関数 。
DECLARE @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SELECT @thesmalldatetime AS 'thesmalldatetime', CONVERT(datetime2(0), @thesmalldatetime) AS 'datetime2(0)';
結果:
+---------------------+---------------------+ | thesmalldatetime | datetime2(0) | |---------------------+---------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00 | +---------------------+---------------------+