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

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

Dieser Artikel enthält Beispiele für die Konvertierung einer smalldatetime Wert zu einem datetime2 Wert in SQL Server.

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

Die datetime2 Datentyp hingegen 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.

Beim Konvertieren einer smalldatetime Wert auf datetime2 , werden die Stunden und Minuten kopiert. Die Sekunden und Sekundenbruchteile werden auf 0 gesetzt.

Beispiel 1 – Implizite Konvertierung

Hier ist ein Beispiel für eine implizite Konvertierung zwischen smalldatetime und datetime2 .

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

Ergebnis:

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

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, smalldatetime zuzuweisen Wert zu einem datetime2 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. Dies führt dazu, dass im Bruchteil 7 Nullen verwendet werden.

Beispiel 2 – Entfernen Sie den Bruchteil

Sie können die Sekundenbruchteile bei Bedarf entfernen. Verwenden Sie dazu einfach datetime2(0) beim Deklarieren der Variablen.

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

Ergebnis:

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

In diesem Fall geben also beide Datentypen denselben Wert zurück. Der Unterschied besteht jedoch darin, dass die datetime2 hat die Fähigkeit, auf die Sekunde genau zu sein (im Vergleich zu smalldatetime auf die Minute genau).

Beispiel:

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

Ergebnis:

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

In diesem Beispiel habe ich das DATEADD() verwendet Funktion zum Addieren von 30 Sekunden zu jedem Wert. Jeder Datentyp gibt jedoch ein anderes Ergebnis zurück. Die datetime2 Der Datentyp berücksichtigt den Sekundenteil und liefert das richtige Ergebnis mit 100%iger Genauigkeit. Die smalldatetime Typ hingegen wird auf die nächste Minute aufgerundet (während der Sekundenteil bei Null bleibt).

Beispiel 3 – 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 zum expliziten Konvertieren zwischen smalldatetime und datetime2 .

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

Ergebnis:

+---------------------+---------------------+
| thesmalldatetime    | datetime2(0)        |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

Beispiel 4 – Explizite Konvertierung mit CONVERT()

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

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

Ergebnis:

+---------------------+---------------------+
| thesmalldatetime    | datetime2(0)        |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+