この記事には、日付の変換の例が含まれています 日時の値 SQLServerの値。
日付を変換するとき 日時の値 、値に追加情報が追加されます。これは、日時が原因です データ型には、日付と時刻の両方の情報が含まれます。 日付 一方、データ型には日付情報のみが含まれます。
例1-暗黙の変換
日付間の暗黙的な変換の例を次に示します。 および日時 。
DECLARE @thedate date, @thedatetime datetime SET @thedate = '2020-12-01' SET @thedatetime = @thedate SELECT @thedate AS 'date', @thedatetime AS 'datetime';
結果:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
明示的に変換するために変換関数(以下のような)を使用していないため、これは暗黙的な変換です。この場合、日付を割り当てようとすると、SQLServerはバックグラウンドで暗黙的な変換を実行します 日時の値 変数。
日付がわかります 変数には日付情報のみが含まれますが、 datetime 変数には、日付と時刻の両方の情報が含まれます。
日付の間で変換する場合 および日時 、時間コンポーネントは00:00:00.000
に設定されます 。これは、日付の値に時刻情報が含まれていないため、SQL Serverが必要な時刻(存在する場合)を知る方法がないためです。
例2–時間を変更する
時刻を変更する必要がある場合(ただし、同じ日付を維持する必要がある場合)は、DATEADD()
を使用できます。 まさにそれを行うための機能。
DECLARE @thedate date, @thedatetime datetime SET @thedate = '2020-12-01' SET @thedatetime = @thedate SET @thedatetime = DATEADD(hour, 8, @thedatetime) SELECT @thedate AS 'date', @thedatetime AS 'datetime';
結果:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+
例3– CAST()を使用した明示的な変換
明示的な変換の例を次に示します。この場合、私はCAST()
を使用します SELECT
内で直接機能します 日付間で明示的に変換するステートメント および日時 。
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS datetime) AS 'datetime';
結果:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
したがって、暗黙の変換と同じ結果が得られます。
次のように時間を調整することもできます:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CAST(@thedate AS datetime)) AS 'datetime';
結果:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+
例4– CONVERT()を使用した明示的な変換
CONVERT()
を使用した明示的な変換の例を次に示します。 CAST()
の代わりに関数 。
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CONVERT(datetime, @thedate) AS 'datetime';
結果:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
そして時間を調整する:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CONVERT(datetime, @thedate)) AS 'datetime';
結果:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+