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

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

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 |
+-------------------------+---------------------+

  1. Pandaer skriver dataramme til andre postgresql-skemaer

  2. Kørsel af Big Data Analytics-forespørgsler ved hjælp af SQL og Presto

  3. Hvordan forespørger jeg mellem to datoer ved hjælp af MySQL?

  4. Hvorfor kan jeg ikke bruge alias i en count(*) kolonne og henvise til det i en have-sætning?