この記事には、日付の変換の例が含まれています datetimeoffsetの値 SQLServerの値。
日付を変換するとき datetimeoffsetの値 、値に追加情報が追加されます。これは、 datetimeoffsetが原因です。 データ型には、日付と時刻の両方の情報、および時間オフセット情報が含まれます。つまり、 datetimeoffset データ型は、タイムゾーンを認識し、24時間制に基づく1日の時刻と組み合わされる日付を定義します。 日付 一方、データ型には日付情報のみが含まれます。
日付から変換する場合 datetimeoffset 、時間(およびタイムゾーンオフセット)が値に自動的に追加されます。ただし、必要に応じていつでも値を変更できます(タイムゾーンオフセットを含む)。
datetimeoffset データ型では、秒の小数部の精度を指定することもできます。これを指定しない場合は、7のスケールが使用されます。これは、小数点の右側に7桁が含まれることを意味します。
例1-暗黙の変換
日付間の暗黙的な変換の例を次に示します。 およびdatetimeoffset 。
DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7) SET @thedate = '2020-12-01' SET @thedatetimeoffset = @thedate SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset';
結果:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | +------------+------------------------------------+
明示的に変換するために変換関数(以下のような)を使用していないため、これは暗黙的な変換です。この場合、日付を割り当てようとすると、SQLServerはバックグラウンドで暗黙的な変換を実行します datetimeoffsetの値 変数。
日付がわかります 変数には日付情報のみが含まれますが、 datetimeoffset 変数には、日付、時刻、およびタイムゾーンのオフセット情報が含まれます。
日付の間で変換する場合 およびdatetimeoffset(7) (つまり、スケール7を使用)、時間コンポーネントは00:00:00.0000000 +00:00
に設定されます 。これはデフォルト値でもあるため、精度値を省略でき、スケール7が使用されます(精度は34になります)。必要に応じて、精度を下げることができます。精度を下げると、値を格納するために必要なスペースの量も減らすことができます。
明確にするために、スケール 数値の小数点の右側の桁数です。 精度 は数値の合計桁数です。
例2– CAST()を使用した明示的な変換
明示的な変換の例を次に示します。この場合、私はCAST()
を使用します SELECT
内で直接機能します 日付間で明示的に変換するステートメント およびdatetimeoffset 。
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS datetimeoffset) AS 'datetimeoffset';
結果:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | +------------+------------------------------------+
したがって、暗黙の変換と同じ結果が得られます。
次のように時間を調整することもできます:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 7, CAST(@thedate AS datetimeoffset)) AS 'datetimeoffset';
結果:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 | +------------+------------------------------------+
DATEADD()
は使用できないことに注意してください タイムオフセットコンポーネントを変更する関数。でも心配しないでください。 それを変更する方法(方法については読んでください)。
例3– CONVERT()を使用した明示的な変換
CONVERT()
を使用した明示的な変換の例を次に示します。 CAST()
の代わりに関数 。
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CONVERT(datetimeoffset, @thedate) AS 'datetimeoffset';
結果:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | +------------+------------------------------------+
そして時間を調整する:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 7, CONVERT(datetimeoffset, @thedate)) AS 'datetimeoffset';
結果:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 | +------------+------------------------------------+
例4–タイムオフセットの変更
前の例では、DATEADD()
を使用しました 時間値を変更する関数。この関数は、タイムオフセットコンポーネントを除く、日付または時刻コンポーネントの任意の部分を変更するために使用できます。 。
時間オフセットを変更する必要がある場合は、TODATETIMEOFFSET()
を使用できます。 働き。この関数を使用して、元の日付を変換することもできます datetimeoffsetの値 価値。この関数は、日付値を受け入れます( datetime2に解決できます 値)、およびオフセット値。
次に例を示します:
DECLARE @thedate date, @thedatetimeoffset datetimeoffset SET @thedate = '2020-12-01' SET @thedatetimeoffset = TODATETIMEOFFSET(@thedate, '+07:00') SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset';
結果:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+
SELECT
内の関数を使用した例を次に示します。 ステートメント:
DECLARE @thedate date = '2020-12-01' SELECT @thedate AS 'date', TODATETIMEOFFSET(@thedate, '+07:00') AS 'datetimeoffset';
結果:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+
TODATETIMEOFFSET()
関数はdatetimeoffsetも受け入れます 値を最初のパラメータとして使用することで、既存の datetimeoffsetを変更することもできます。 必要に応じて値。
例:
DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7) SET @thedate = '2020-12-01' SET @thedatetimeoffset = @thedate SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset', TODATETIMEOFFSET(@thedatetimeoffset, '+07:00') AS 'Modified';
結果:
+------------+------------------------------------+------------------------------------+ | date | datetimeoffset | Modified | |------------+------------------------------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+------------------------------------+