この記事には、 datetimeoffsetの変換例が含まれています smalldatetimeの値 SQLServerで。
datetimeoffsetを変換するとき smalldatetimeの値 、日付と時刻がコピーされます。分は切り上げられ(秒の値に応じて)、秒は0に設定されます。
datetimeoffset データ型では、0から7までの秒の小数部の精度を指定できます。これは、datetimeoffset(n)
を使用して行われます。 構文。これを指定しない場合は、7(デフォルト)が使用されます。タイムゾーンオフセットもあります。このデータ型のストレージサイズは、使用されている精度に応じて、8、9、または10バイト(さらに精度は1バイト)のいずれかです。
smalldatetime 一方、データ型にはタイムゾーンの認識がないため、タイムゾーンのオフセットは含まれていません。また、小数秒はなく、秒コンポーネントは常にゼロ(:00)に設定されます。その精度は分単位です。このデータ型のストレージサイズは4バイトに固定されています。
例1-暗黙の変換
これは、 datetimeoffset間の暗黙的な変換の例です。 およびsmalldatetime 。
DECLARE @thedatetimeoffset datetimeoffset, @thesmalldatetime smalldatetime; SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +07:00'; SET @thesmalldatetime = @thedatetimeoffset; SELECT @thedatetimeoffset AS 'datetimeoffset', @thesmalldatetime AS 'smalldatetime';
結果:
+------------------------------------+---------------------+ | datetimeoffset | smalldatetime | |------------------------------------+---------------------| | 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00 | +------------------------------------+---------------------+
明示的に変換するために変換関数(以下のような)を使用していないため、これは暗黙的な変換です。この場合、 datetimeoffset を割り当てようとすると、SQLServerはバックグラウンドで暗黙的な変換を実行します。 smalldatetimeの値 変数。
smalldatetime 変数には小数秒の精度がなく、その秒はゼロに設定されています。また、元の値の秒の値が30であったため、分は切り上げられました。
もう1つの観察結果は、タイムゾーンオフセットが切り捨てられたことです– smalldatetime データ型にはタイムゾーン認識がありません。
この変換では、 datetimeoffset のストレージサイズが10バイト(精度を計算すると11バイト)から減少しました。 、 smalldatetimeの場合は4バイトまで 。
例2– CAST()を使用した明示的な変換
明示的な変換の例を次に示します。この場合、私はCAST()
を使用します SELECT
内で直接機能します datetimeoffset間で明示的に変換するステートメント およびsmalldatetime 。
DECLARE @thedatetimeoffset datetimeoffset; SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +07:00'; SELECT @thedatetimeoffset AS 'datetimeoffset', CAST(@thedatetimeoffset AS smalldatetime) AS 'smalldatetime';
結果:
+------------------------------------+-------------------------+ | datetimeoffset | smalldatetime | |------------------------------------+-------------------------| | 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00 | +------------------------------------+-------------------------+
例3– CONVERT()を使用した明示的な変換
CONVERT()
を使用した明示的な変換の例を次に示します。 CAST()
の代わりに関数 。
DECLARE @thedatetimeoffset datetimeoffset; SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +07:00'; SELECT @thedatetimeoffset AS 'datetimeoffset', CONVERT(smalldatetime, @thedatetimeoffset) AS 'smalldatetime';
結果:
+------------------------------------+-------------------------+ | datetimeoffset | smalldatetime | |------------------------------------+-------------------------| | 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00 | +------------------------------------+-------------------------+