Dit artikel bevat voorbeelden van het converteren van een datetime waarde toe aan een smalldatetime waarde in SQL Server.
Een van de voordelen van het converteren van een datetime waarde voor smalldatetime is dat u de opslaggrootte verkleint van 8 bytes tot 4 bytes. Je verliest echter wel de precisie om dit te doen.
De datetime gegevenstype bevat een deel van drie cijfers in fracties van seconden. De nauwkeurigheid wordt afgerond op stappen van .000, .003 of .007 seconden.
De smalldatetime gegevenstype daarentegen heeft geen fractionele seconden en de secondencomponent is altijd ingesteld op nul (:00). Het heeft ook een nauwkeurigheid tot op de minuut nauwkeurig.
Wanneer u een datetime . converteert waarde voor smalldatetime , wordt de datum en een deel van het tijdgedeelte gekopieerd. De secondencomponent wordt op nul gezet (ongeacht de oorspronkelijke waarde) en de tijd wordt afgerond op de dichtstbijzijnde minuut. Alle fractionele seconden worden verwijderd.
Voorbeeld 1 – Impliciete conversie
Hier is een voorbeeld van een impliciete conversie tussen datetime en smalldatetime .
DECLARE @thedatetime datetime, @thesmalldatetime smalldatetime; SET @thedatetime = '2025-05-21 10:15:30.123'; SET @thesmalldatetime = @thedatetime; SELECT @thedatetime AS 'datetime', @thesmalldatetime AS 'smalldatetime';
Resultaat:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.123 | 2025-05-21 10:16:00 | +-------------------------+---------------------+
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 datetime toe te wijzen waarde toe aan een smalldatetime variabel.
In dit voorbeeld kunnen we zien dat de smalldatetime waarde omvat niet de fractionele seconden, de seconden zijn ingesteld op nul en de minuut is naar boven afgerond.
Voorbeeld 2 – 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 datetime en smalldatetime .
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CAST(@thedatetime AS smalldatetime) AS 'smalldatetime';
Resultaat:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 | +-------------------------+---------------------+
Het is je misschien opgevallen dat ik in dit voorbeeld de fractionele seconden heb gewijzigd bij het toewijzen van de beginwaarde aan @thedatetime
. Maar omdat ik het toewijs aan een datetime gegevenstype, wordt het gedeelte met breuken naar boven afgerond (omdat de nauwkeurigheid wordt afgerond op stappen van .000, .003 of .007 seconden). In dit geval probeer ik een fractionele seconde van 125
. toe te wijzen maar het wordt naar boven afgerond op 127
.
Dit heeft echter geen invloed op de smalldatetime waarde.
Voorbeeld 3 – Expliciete conversie met CONVERT()
Hier is een voorbeeld van een expliciete conversie met de CONVERT()
functie in plaats van CAST()
.
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CONVERT(smalldatetime, @thedatetime) AS 'smalldatetime';
Resultaat:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 | +-------------------------+---------------------+