sql >> Database teknologi >  >> RDS >> Sqlserver

Konverter 'datetime2' til 'smalldatetime' i SQL Server (T-SQL-eksempler)

Denne artikel indeholder eksempler på konvertering af en datetime2 værdi til en smalldatetime værdi i SQL Server.

En af fordelene ved at konvertere en datetime2 værdi til smalldatetime er, at du reducerer lagerstørrelsen fra enten 7, 8 eller 9 bytes ned til 4 bytes. Du mister dog præcision.

datetime2 datatype giver dig mulighed for at angive en brøksekunders præcision fra 0 til 7. Hvis du ikke angiver dette, vil den bruge 7 (standard). Hvis du angiver nul (0 ), vil dens nøjagtighed være til nærmeste sekund.

smalldatetime datatypen på den anden side, har ikke nogen brøkdele sekunder, og dens sekunder-komponent er altid sat til nul (:00). Dens nøjagtighed er til nærmeste minut.

Når du konverterer en datetime2 værdi til smalldatetime , kopieres datoen og en del af tidsdelen. Sekunder-komponenten sættes til nul (uanset den oprindelige værdi af sekund-komponenten), 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 datetime2 og smalldatetime .

DECLARE @thedatetime2 datetime2, @thesmalldatetime smalldatetime;SET @thedatetime2 ='2025-05-21 10:15:30.1234567';SET @thesmalldatetime =@thedatetime2;SELECT @thedatetime2 AS 'datetime2', 'thesmalldatetime' AS;

Resultat:

+-------------------------------------+---------------- -----+| datetime2 | smalldatetime ||-------------------------------------+---------------- ----|| 2025-05-21 10:15:30.1234567 | 21-05-2025 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 datetime2 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.

I dette tilfælde er datetime2 værdi bruger en præcision på 7. Dette skyldes, at 7 er standardværdien. Jeg specificerede ikke en præcision, og derfor blev standardværdien brugt.

Men det ville have returneret det samme resultat uanset den præcision, jeg valgte. Selv hvis jeg havde reduceret det til nul (dvs. erklæret det som datetime2(0) ), ville det stadig have givet det samme resultat.

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 til eksplicit at konvertere mellem datetime2 og smalldatetime .

DECLARE @thedatetime2 datetime2(0);SET @thedatetime2 ='2025-05-21 10:15:30';SELECT @thedatetime2 AS 'datetime2', CAST(@thedatetime2 AS smalldatetime) AS 'smalldatetime'; 

Resultat:

+---------------------+---------------------+| datetime2 | smalldatetime ||---------------------+------------------------|| 21-05-2025 10:15:30 | 21-05-2025 10:16:00 |+---------------------------+---------------- -----+

I dette eksempel besluttede jeg at bruge en skala fra nul for datetime2 værdi (dvs. datetime2(0) ), men dette påvirker ikke den resulterende 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() .

ERKLÆR @thedatetime2 datetime2(0);SET @thedatetime2 ='2025-05-21 10:15:30';SELECT @thedatetime2 AS 'datetime2', CONVERT(smalldatetime, @thedatetime2) AS 'smalldatetime'; 

Resultat:

+---------------------+---------------------+| datetime2 | smalldatetime ||---------------------+------------------------|| 21-05-2025 10:15:30 | 21-05-2025 10:16:00 |+---------------------------+---------------- -----+

  1. SQLiteException:ukendt database

  2. Forsøger at få ejendom af ikke-objekt ind

  3. Sådan fjerner du "X Rows Selected" i SQLcl &SQL*Plus (Oracle)

  4. opdatere flere rækker ved hjælp af limit i mysql?