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

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

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

Når du konverterer en datotidsforskydning værdi til smalldatetime , kopieres dato og timer. Minutterne rundes op (afhængigt af sekundværdien), og sekunderne sættes til 0.

datotidsforskydningen datatype giver dig mulighed for at angive en brøksekunders præcision fra 0 til 7. Dette gøres ved at bruge datetimeoffset(n) syntaks. Hvis du ikke angiver dette, vil det bruge 7 (standard). Den har også en tidszoneforskydning. Denne datatypes lagerstørrelse er enten 8, 9 eller 10 bytes (plus 1 byte for præcisionen), afhængigt af den anvendte præcision.

Den smalldatetime datatype på den anden side har ikke tidszonebevidsthed, og derfor inkluderer den ikke nogen tidszoneforskydning. Den har heller ikke nogen brøksekunder, og dens sekundkomponent er altid sat til nul (:00). Dens nøjagtighed er til nærmeste minut. Denne datatypes lagerstørrelse er fastsat til 4 bytes.

Eksempel 1 – Implicit konvertering

Her er et eksempel på en implicit konvertering mellem datetime offset og smalldatetime .

ERKLÆR @thedatetimeoffset datetimeoffset, @thesmalldatetime smalldatetime;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';SET @thesmalldatetime =@thedatetimeoffset;SELECT @thedatesmalldateoffset', 'date AS 'smalldatetime';

Resultat:

+--------------------------------------------+-------- ------------+| datotidsforskydning | smalldatetime ||---------------------------------------------+---------------- ----------|| 2025-05-21 10:15:30.1234567 +07:00 | 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 datetime offset værdi til en smalldatetime variabel.

Vi kan se, at smalldatetime variabel har ingen brøksekunders præcision, og dens sekunder er blevet sat til nul. Referatet er også rundet op, da den oprindelige værdi havde en sekundværdi på 30.

En anden observation er, at tidszoneforskydningen blev afkortet – smalldatetime datatypen har ingen tidszonebevidsthed.

I denne konvertering er lagerstørrelsen faldet fra 10 bytes (11 bytes, når du tæller præcisionen) for datetime offset , til 4 bytes for smalldatetime .

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 datetimeoffset og smalldatetime .

DECLARE @thedatetimeoffset datetimeoffset;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';SELECT @thedatetimeoffset AS 'datetimeoffset', CAST(@thedatetimeoffset AS smalldatetime'; 

Resultat:

+--------------------------------------------+-------- ----------------+| datotidsforskydning | smalldatetime ||---------------------------------------------+---------------- ---------------|| 2025-05-21 10:15:30.1234567 +07:00 | 21-05-2025 10:16:00 |+--------------------------------------------+- ------------------------+

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 @thedatetimeoffset datetimeoffset;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';SELECT @thedatetimeoffset AS 'datetime offset', CONVERT(smalldatetime, @thedatetimeoffset) AS 'lille datotidsforskydning'; /pre> 

Resultat:

+--------------------------------------------+-------- ----------------+| datotidsforskydning | smalldatetime ||---------------------------------------------+---------------- ---------------|| 2025-05-21 10:15:30.1234567 +07:00 | 21-05-2025 10:16:00 |+--------------------------------------------+- ------------------------+

  1. Top nyttige AWR-forespørgsler til R12.2/R12.1-opgradering

  2. Kontroller, om strengen indeholder accenttegn i SQL?

  3. Overvågning af Percona Server til MySQL - Key Metrics

  4. Brug af en variabel periode i et interval i Postgres