Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Konvertieren Sie „datetime“ in „smalldatetime“ in SQL Server (T-SQL-Beispiele)

Dieser Artikel enthält Beispiele für die Konvertierung einer datetime Wert auf smalldatetime Wert in SQL Server.

Einer der Vorteile der Konvertierung einer datetime Wert auf smalldatetime ist, dass Sie die Speichergröße von 8 Byte auf 4 Byte reduzieren. Allerdings verliert man dabei an Präzision.

Die datetime Der Datentyp enthält einen 3-stelligen Sekundenbruchteil. Die Genauigkeit wird auf 0,000, 0,003 oder 0,007 Sekunden gerundet.

Die smalldatetime Der Datentyp hingegen hat keine Sekundenbruchteile und seine Sekundenkomponente ist immer auf Null (:00) gesetzt. Außerdem hat es nur eine minutengenaue Genauigkeit.

Beim Konvertieren einer datetime Wert auf smalldatetime , das Datum und ein Teil des Zeitabschnitts werden kopiert. Die Sekundenkomponente wird auf Null gesetzt (unabhängig vom ursprünglichen Wert) und die Zeit wird auf die nächste Minute gerundet. Sekundenbruchteile werden entfernt.

Beispiel 1 – Implizite Konvertierung

Hier ist ein Beispiel für eine implizite Konvertierung zwischen datetime und 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';

Ergebnis:

+-------------------------+---------------------+
| datetime                | smalldatetime       |
|-------------------------+---------------------|
| 2025-05-21 10:15:30.123 | 2025-05-21 10:16:00 |
+-------------------------+---------------------+

Dies ist eine implizite Konvertierung, da wir keine Konvertierungsfunktion (wie die unten) verwenden, um sie explizit zu konvertieren. In diesem Fall führt SQL Server im Hintergrund eine implizite Konvertierung durch, wenn wir versuchen, datetime zuzuweisen Wert auf smalldatetime Variable.

In diesem Beispiel sehen wir, dass die smalldatetime Der Wert enthält keine Sekundenbruchteile, die Sekunden wurden auf Null gesetzt und die Minuten wurden aufgerundet.

Beispiel 2 – Explizite Konvertierung mit CAST()

Hier ist ein Beispiel für eine explizite Konvertierung. In diesem Fall verwende ich den CAST() Funktion direkt innerhalb des SELECT -Anweisung, um explizit zwischen datetime zu konvertieren und smalldatetime .

DECLARE @thedatetime datetime;
SET @thedatetime = '2025-05-21 10:15:30.125';
SELECT 
  @thedatetime AS 'datetime',
  CAST(@thedatetime AS smalldatetime) AS 'smalldatetime';

Ergebnis:

+-------------------------+---------------------+
| datetime                | smalldatetime       |
|-------------------------+---------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 |
+-------------------------+---------------------+

Sie haben vielleicht bemerkt, dass ich in diesem Beispiel die Sekundenbruchteile geändert habe, als ich @thedatetime den Anfangswert zugewiesen habe . Aber weil ich es einem datetime zuweise Datentyp wird der Sekundenbruchteil aufgerundet (da seine Genauigkeit auf 0,000, 0,003 oder 0,007 Sekunden gerundet wird). In diesem Fall versuche ich, Sekundenbruchteile von 125 zuzuweisen aber es wird auf 127 aufgerundet .

Dies wirkt sich jedoch nicht auf smalldatetime aus Wert.

Beispiel 3 – Explizite Konvertierung mit CONVERT()

Hier ist ein Beispiel für eine explizite Konvertierung mit CONVERT() Funktion anstelle von CAST() .

DECLARE @thedatetime datetime;
SET @thedatetime = '2025-05-21 10:15:30.125';
SELECT 
  @thedatetime AS 'datetime',
  CONVERT(smalldatetime, @thedatetime) AS 'smalldatetime';

Ergebnis:

+-------------------------+---------------------+
| datetime                | smalldatetime       |
|-------------------------+---------------------|
| 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 |
+-------------------------+---------------------+