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

Beispiele für die Konvertierung von „date“ in „datetime“ in SQL Server (T-SQL)

Dieser Artikel enthält Beispiele für die Konvertierung eines Datums Wert zu einem datetime Wert in SQL Server.

Wenn Sie ein Datum konvertieren Wert auf datetime , werden dem Wert zusätzliche Informationen hinzugefügt. Das liegt daran, dass datetime Datentyp enthält sowohl Datums- als auch Zeitinformationen. Das Datum Datentyp hingegen enthält nur Datumsinformationen.

Beispiel 1 – Implizite Konvertierung

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

DECLARE @thedate date, @thedatetime datetime
SET @thedate = '2020-12-01'
SET @thedatetime = @thedate
SELECT 
  @thedate AS 'date',
  @thedatetime AS 'datetime';

Ergebnis:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00: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, das Datum zuzuweisen Wert zu einem datetime Variable.

Wir können das Datum sehen Variable enthält nur Datumsinformationen, während datetime Variable enthält sowohl Datums- als auch Zeitinformationen.

Beim Umrechnen zwischen Datum und datetime , wird die Zeitkomponente auf 00:00:00.000 gesetzt . Dies liegt daran, dass der Datumswert keine Zeitinformationen enthält, sodass SQL Server keine Möglichkeit hat, die gewünschte Uhrzeit (falls vorhanden) zu kennen.

Beispiel 2 – Uhrzeit ändern

Wenn Sie die Zeit ändern müssen (aber dasselbe Datum beibehalten), können Sie DATEADD() verwenden Funktion, um genau das zu tun.

DECLARE @thedate date, @thedatetime datetime
SET @thedate = '2020-12-01'
SET @thedatetime = @thedate
SET @thedatetime = DATEADD(hour, 8, @thedatetime)
SELECT 
  @thedate AS 'date',
  @thedatetime AS 'datetime';

Ergebnis:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+

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, explizit zwischen date zu konvertieren und datetime .

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CAST(@thedate AS datetime) AS 'datetime';

Ergebnis:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

Wir erhalten also das gleiche Ergebnis wie bei der impliziten Konvertierung.

Wir können die Zeit auch so anpassen:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 8, CAST(@thedate AS datetime)) AS 'datetime';

Ergebnis:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+

Beispiel 4 – Explizite Konvertierung mit CONVERT()

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

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CONVERT(datetime, @thedate) AS 'datetime';

Ergebnis:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

Und die Uhrzeit anpassen:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 8, CONVERT(datetime, @thedate)) AS 'datetime';

Ergebnis:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+