datetimeoffsetがある場合 値ですが、時間とタイムゾーンのオフセット部分は必要ありません。日付に変換します。 (値から不要な詳細を削除しながら)多くのストレージスペースを節約します。この記事には、 datetimeoffsetの変換例が含まれています 日付の値 SQLServerの値。
datetimeoffset データ型には、タイムゾーンオフセットのある日付と時刻が含まれます。また、0から7までの秒の部分があります(これは、割り当てられている秒の数によって異なります)。これは、datetimeoffset(n)
を使用して行われます。 構文。これを指定しない場合は、7(デフォルト)が使用されます。このデータ型のストレージサイズは、使用されている精度に応じて、8、9、または10バイト(および精度を格納するための1バイト)のいずれかです。その精度は100ナノ秒です。
日付 一方、データ型には日付のみが含まれます。時刻は含まれず、精度は1日です。ストレージに3バイトを使用します。
datetimeoffsetを変換するとき 日付の値 データ型の場合、時間部分(タイムゾーンオフセットを含む)が失われます。ただし、ストレージサイズも固定の3バイトに減らします。もちろん、この変換は、時間部分とタイムゾーンオフセットが必要ない場合にのみ行います。
例1-暗黙の変換
これは、 datetimeoffset間の暗黙的な変換の例です。 および日付 。
DECLARE @thedatetimeoffset datetimeoffset, @thedate date; SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +10:30'; SET @thedate = @thedatetimeoffset; SELECT @thedatetimeoffset AS 'datetimeoffset', @thedate AS 'date';
結果:
+------------------------------------+------------+ | datetimeoffset | date | |------------------------------------+------------| | 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 | +------------------------------------+------------+
明示的に変換するために変換関数(以下のような)を使用していないため、これは暗黙的な変換です。この場合、 datetimeoffset を割り当てようとすると、SQLServerはバックグラウンドで暗黙的な変換を実行します。 日付の値 変数。
ここで、日付がわかります 値には日付のみが含まれます(時間コンポーネントは含まれません)。タイムゾーンオフセットを含む時間コンポーネントが値から削除されました。
この例では、 datetimeoffset valueはデフォルトの精度を使用します(小数点以下7桁になります)。これにより、データ型は10バイトを使用します(実際には、精度を格納する余分なバイトを数えると11バイトになります)。 日付 値はわずか3バイトを使用します。
例2– CAST()を使用した明示的な変換
明示的な変換の例を次に示します。この場合、私はCAST()
を使用します SELECT
内で直接機能します datetimeoffset間で明示的に変換するステートメント および日付 。
DECLARE @thedatetimeoffset datetimeoffset; SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +10:30'; SELECT @thedatetimeoffset AS 'datetimeoffset', CAST(@thedatetimeoffset AS date) AS 'date';
結果:
+------------------------------------+------------+ | datetimeoffset | date | |------------------------------------+------------| | 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 | +------------------------------------+------------+
例3– CONVERT()を使用した明示的な変換
CONVERT()
を使用した明示的な変換の例を次に示します。 CAST()
の代わりに関数 。
DECLARE @thedatetimeoffset datetimeoffset; SET @thedatetimeoffset = '2025-05-21 10:15:30.1234567 +10:30'; SELECT @thedatetimeoffset AS 'datetimeoffset', CONVERT(date, @thedatetimeoffset) AS 'date';
結果:
+------------------------------------+------------+ | datetimeoffset | date | |------------------------------------+------------| | 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 | +------------------------------------+------------+