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

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

Dieser Artikel enthält Beispiele für die Konvertierung einer smalldatetime Wert zu einem datetime 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 datetime Der Datentyp enthält andererseits einen 3-stelligen Sekundenbruchteil und seine Genauigkeit wird auf 0,000, 0,003 oder 0,007 Sekunden gerundet.

Beim Konvertieren einer smalldatetime Wert auf datetime , die smalldatetime value wird in datetime kopiert Wert. Die Sekundenbruchteile werden auf 0 gesetzt.

In den meisten Fällen ist es besser, in ein datetime2 umzuwandeln Datentyp statt datetime . Dadurch wird die Genauigkeit erhöht, während die gleiche Speichergröße verwendet wird. Wenn Sie es jedoch wirklich brauchen, muss es datetime sein , hier sind einige Beispiele.

Beispiel 1 – Implizite Konvertierung

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

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

Ergebnis:

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

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 datetime Variable.

In diesem Beispiel sehen wir, dass die smalldatetime Der Wert enthält keine Sekundenbruchteile, die Sekunden wurden auf Null gesetzt, und die Minute wurde von dem tatsächlichen Wert, den ich ihm zuzuweisen versuchte, aufgerundet.

Die datetime Der Wert enthält einen dreistelligen Bruchteil, der auf Null gesetzt wird.

Beispiel 2 – Bruchteil ändern

Auch wenn der Bruchteil auf Null gesetzt ist, nachdem Sie den Wert in datetime umgewandelt haben , können Sie jetzt den Bruchteil (und übrigens auch den Sekundenteil) ändern.

In diesem Beispiel verwende ich DATEADD() Funktion zum Ändern der Sekundenbruchteile von datetime Wert.

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime datetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime AS 'datetime',
  DATEADD(millisecond, 123, @thedatetime) AS 'datetime Modified';

Ergebnis (bei vertikaler Ausgabe):

smalldatetime     | 2025-05-21 10:16:00
datetime          | 2025-05-21 10:16:00.000
datetime Modified | 2025-05-21 10:16:00.123

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 datetime .

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

Ergebnis:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 |
+---------------------+-------------------------+

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(datetime, @thesmalldatetime) AS 'datetime';

Ergebnis:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 |
+---------------------+-------------------------+

Wie bereits erwähnt, sollten Sie in Betracht ziehen, in ein datetime2 umzuwandeln Datentyp anstelle von datetime . Dadurch wird die Genauigkeit erhöht, während die gleiche Speichergröße verwendet wird.