Dit artikel bevat voorbeelden van het converteren van een datum waarde naar een datetime waarde in SQL Server.
Wanneer u een datum converteert waarde tot datetime , wordt er extra informatie aan de waarde toegevoegd. Dit komt omdat de datetime gegevenstype bevat zowel datum- als tijdinformatie. De datum gegevenstype daarentegen bevat alleen datuminformatie.
Voorbeeld 1 – Impliciete conversie
Hier is een voorbeeld van een impliciete conversie tussen datum en datetime .
DECLARE @thedate date, @thedatetime datetime SET @thedate = '2020-12-01' SET @thedatetime = @thedate SELECT @thedate AS 'date', @thedatetime AS 'datetime';
Resultaat:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
Dit is een impliciete conversie omdat we geen conversiefunctie (zoals hieronder) gebruiken om deze expliciet te converteren. In dit geval voert SQL Server achter de schermen een impliciete conversie uit wanneer we proberen de datum toe te wijzen waarde naar een datetime variabel.
We kunnen zien dat de datum variabele bevat alleen datuminformatie, terwijl de datetime variabele bevat zowel datum- als tijdinformatie.
Wanneer u converteert tussen datum en datetime , de tijdcomponent is ingesteld op 00:00:00.000
. Dit komt omdat de datumwaarde geen tijdinformatie bevat, dus SQL Server kan op geen enkele manier weten hoe laat u wilt (indien aanwezig).
Voorbeeld 2 – Wijzig de tijd
Als u de tijd wilt wijzigen (maar dezelfde datum wilt behouden), kunt u de DATEADD()
gebruiken functie om precies dat te doen.
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';
Resultaat:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+
Voorbeeld 3 – Expliciete conversie met CAST()
Hier is een voorbeeld van een expliciete conversie. In dit geval gebruik ik de CAST()
functie direct binnen de SELECT
statement om expliciet te converteren tussen datum en datetime .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS datetime) AS 'datetime';
Resultaat:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
We krijgen dus hetzelfde resultaat als de impliciete conversie.
We kunnen de tijd ook als volgt aanpassen:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CAST(@thedate AS datetime)) AS 'datetime';
Resultaat:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+
Voorbeeld 4 – Expliciete conversie met CONVERT()
Hier is een voorbeeld van een expliciete conversie met de CONVERT()
functie in plaats van CAST()
.
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CONVERT(datetime, @thedate) AS 'datetime';
Resultaat:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
En de tijd aanpassen:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CONVERT(datetime, @thedate)) AS 'datetime';
Resultaat:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+