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

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

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

Einer der Vorteile der Konvertierung von datetime2 Wert auf smalldatetime besteht darin, dass Sie die Speichergröße von entweder 7, 8 oder 9 Byte auf 4 Byte reduzieren. Sie verlieren jedoch an Präzision.

Die datetime2 Datentyp ermöglicht es Ihnen, eine Genauigkeit von Sekundenbruchteilen von 0 bis 7 anzugeben. Wenn Sie dies nicht angeben, wird 7 (Standardeinstellung) verwendet. Wenn Sie Null angeben (0 ), ist seine Genauigkeit auf die nächste Sekunde genau.

Die smalldatetime Der Datentyp hingegen hat keine Sekundenbruchteile und seine Sekundenkomponente ist immer auf Null (:00) gesetzt. Seine Genauigkeit ist minutengenau.

Beim Konvertieren eines datetime2 Wert auf smalldatetime , das Datum und ein Teil des Zeitabschnitts werden kopiert. Die Sekundenkomponente wird auf Null gesetzt (unabhängig vom ursprünglichen Wert der Sekundenkomponente) 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 datetime2 und 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';

Ergebnis:

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

In diesem Fall datetime2 value verwendet eine Genauigkeit von 7. Dies liegt daran, dass 7 der Standardwert ist. Ich habe keine Genauigkeit angegeben und daher wurde der Standardwert verwendet.

Aber es hätte das gleiche Ergebnis zurückgegeben, unabhängig von der Genauigkeit, die ich gewählt habe. Selbst wenn ich es auf Null reduziert hätte (d. h. es als datetime2(0) deklariert hätte). ), hätte es immer noch das gleiche Ergebnis zurückgegeben.

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 datetime2 zu konvertieren und smalldatetime .

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

Ergebnis:

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

In diesem Beispiel habe ich mich entschieden, für datetime2 eine Skala von Null zu verwenden Wert (z. B. datetime2(0) ), dies wirkt sich jedoch nicht auf die resultierende 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 @thedatetime2 datetime2(0);SET @thedatetime2 ='2025-05-21 10:15:30';SELECT @thedatetime2 AS 'datetime2', CONVERT(smalldatetime, @thedatetime2) AS 'smalldatetime'; 

Ergebnis:

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