sql >> Database >  >> RDS >> Sqlserver

Converteer 'datetime2' naar 'smalldatetime' in SQL Server (T-SQL-voorbeelden)

Dit artikel bevat voorbeelden van het converteren van een datetime2 waarde toe aan een smalldatetime waarde in SQL Server.

Een van de voordelen van het converteren van een datetime2 waarde voor smalldatetime is dat u de opslaggrootte verkleint van 7, 8 of 9 bytes tot 4 bytes. Je verliest echter wel de precisie.

De datetime2 Met het gegevenstype kunt u een precisie van een fractie van een seconde opgeven van 0 tot 7. Als u dit niet opgeeft, wordt 7 gebruikt (de standaardinstelling). Als u nul opgeeft (0 ), is de nauwkeurigheid tot op de seconde nauwkeurig.

De smalldatetime gegevenstype daarentegen heeft geen fractionele seconden en de secondencomponent is altijd ingesteld op nul (:00). De nauwkeurigheid is tot op de minuut nauwkeurig.

Wanneer u een datetime2 . converteert waarde voor smalldatetime , wordt de datum en een deel van het tijdgedeelte gekopieerd. De secondencomponent wordt op nul gezet (ongeacht de oorspronkelijke waarde van de secondencomponent) 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 datetime2 en smalldatetime .

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

Resultaat:

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

In dit geval is de datetime2 waarde gebruikt een nauwkeurigheid van 7. Dit komt omdat 7 de standaardwaarde is. Ik heb geen precisie opgegeven en daarom is de standaardwaarde gebruikt.

Maar het zou hetzelfde resultaat hebben opgeleverd, ongeacht de precisie die ik koos. Zelfs als ik het tot nul had teruggebracht (d.w.z. het had gedeclareerd als datetime2(0) ), zou het nog steeds hetzelfde resultaat hebben opgeleverd.

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 datetime2 en smalldatetime .

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

Resultaat:

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

In dit voorbeeld heb ik besloten om een ​​schaal van nul te gebruiken voor de datetime2 waarde (d.w.z. datetime2(0) ), heeft dit echter geen invloed op de resulterende 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 @thedatetime2 datetime2(0);
SET @thedatetime2 = '2025-05-21 10:15:30';
SELECT 
  @thedatetime2 AS 'datetime2',
  CONVERT(smalldatetime, @thedatetime2) AS 'smalldatetime';

Resultaat:

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

  1. SQLRecoverableException:I/O-uitzondering:verbinding opnieuw instellen

  2. Afbeeldingen toewijzen aan lijstBekijk items Tutorial-03

  3. Beperking voor slechts één record gemarkeerd als standaard

  4. mysqli::query():Kan mysqli niet ophalen