Denne artikel indeholder eksempler på konvertering af en datotid værdi til en smalldatetime værdi i SQL Server.
En af fordelene ved at konvertere en datotid værdi til smalldatetime er, at du reducerer lagerstørrelsen fra 8 bytes ned til 4 bytes. Men du mister præcision for at gøre det.
datoen datatypen omfatter en 3-cifret del af brøksekunder. Dens nøjagtighed er afrundet til trin på 0,000, 0,003 eller 0,007 sekunder.
smalldatetime datatypen på den anden side, har ikke nogen brøkdele sekunder, og dens sekunder-komponent er altid sat til nul (:00). Desuden har den kun en nøjagtighed til nærmeste minut.
Når du konverterer en datotid værdi til smalldatetime , kopieres datoen og en del af tidsdelen. Sekunder-komponenten sættes til nul (uanset den oprindelige værdi), og tiden afrundes til nærmeste minut. Eventuelle brøkdele af sekunder fjernes.
Eksempel 1 – Implicit konvertering
Her er et eksempel på en implicit konvertering mellem datetime og 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';
Resultat:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.123 | 2025-05-21 10:16:00 | +-------------------------+---------------------+
Dette er en implicit konvertering, fordi vi ikke bruger en konverteringsfunktion (som dem nedenfor) til eksplicit at konvertere den. I dette tilfælde udfører SQL Server en implicit konvertering bag kulisserne, når vi forsøger at tildele datetime værdi til en smalldatetime variabel.
I dette eksempel kan vi se, at smalldatetime værdien inkluderer ikke brøksekunderne, sekunderne er blevet sat til nul, og minuttet er rundet op.
Eksempel 2 – Eksplicit konvertering ved hjælp af CAST()
Her er et eksempel på en eksplicit konvertering. I dette tilfælde bruger jeg CAST()
funktion direkte i SELECT
sætning for eksplicit at konvertere mellem dato og klokkeslæt og smalldatetime .
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CAST(@thedatetime AS smalldatetime) AS 'smalldatetime';
Resultat:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 | +-------------------------+---------------------+
Du har måske bemærket, at jeg i dette eksempel ændrede brøksekunderne, da jeg tildelte startværdien til @thedatetime
. Men fordi jeg tildeler det til et datotidspunkt datatype, rundes brøksekundersdelen op (fordi dens nøjagtighed afrundes til trin på 0,000, 0,003 eller 0,007 sekunder). I dette tilfælde forsøger jeg at tildele en brøkdel af sekunder af 125
men det rundes op til 127
.
Dette påvirker dog ikke smalldatetime værdi.
Eksempel 3 – Eksplicit konvertering ved hjælp af CONVERT()
Her er et eksempel på en eksplicit konvertering ved hjælp af CONVERT()
funktion i stedet for CAST()
.
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CONVERT(smalldatetime, @thedatetime) AS 'smalldatetime';
Resultat:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 | +-------------------------+---------------------+