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

Konvertieren von einem Datumsformat in ein anderes in SQL Server mit CONVERT()

Wenn Sie mit Datenbanken und anderen Programmierumgebungen arbeiten, erhalten Sie manchmal einen Datumswert, aber im falschen Format/Datentyp. Wenn beispielsweise ein Datum mit einer eingebauten Datumsfunktion generiert wurde, kann es sowohl das Datum als auch die Uhrzeit bis auf die letzte Nanosekunde enthalten. Und alles, was Sie wollen, ist der Tag, der Monat und das Jahr, sagen Sie so:2018-01-01.

Wenn dies passiert, während Sie SQL Server verwenden, können Sie CONVERT() verwenden Funktion, um es in einen anderen Datentyp zu konvertieren. Wenn Sie dies tun, bestimmt der Datentyp das Format, in dem er angezeigt wird.

Dieser Artikel enthält Beispiele für die Verwendung von CONVERT() Funktion in SQL Server, um einen Datumswert in einen anderen (Datums-)Datentyp zu konvertieren.

Syntax

Zunächst einmal die offizielle Syntax:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Diese Argumente sind wie folgt definiert:

expression
Jeder gültige Ausdruck.
data_type
Der Zieldatentyp. Dazu gehört xmlbigint und sql_variant . Alias-Datentypen können nicht verwendet werden.
length
Eine optionale ganze Zahl, die die Länge des Zieldatentyps angibt. Der Standardwert ist 30 .
style
Ein ganzzahliger Ausdruck, der angibt, wie CONVERT() Funktion übersetzt Ausdruck . Für einen Stilwert von NULL wird NULL zurückgegeben. Datentyp bestimmt die Reichweite.

Beispiel 1 – Konvertieren von SYSDATETIME() in Datumsdatentyp

In diesem Beispiel generieren wir das aktuelle Datum/Uhrzeit mit dem SYSDATETIME() Funktion und wandle das in ein Datum um Datentyp.

Beachten Sie, dass SYSDATETIME() generiert seinen Wert als datetime2(7) Datentyp, also konvertieren wir ihn von diesem Datentyp in einen anderen Datentyp.

SELECT 
    SYSDATETIME() AS Original,
    CONVERT(date, SYSDATETIME()) AS Converted;

Ergebnis:

+-----------------------------+-------------+
| Original                    | Converted   |
|-----------------------------+-------------|
| 2018-06-06 22:53:47.2318751 | 2018-06-06  |
+-----------------------------+-------------+

Beispiel 2 – Konvertieren von SYSDATETIME() in smalldatetime Datentyp

In diesem Beispiel wandeln wir das Datum in ein smalldatetime um Datentyp.

SELECT 
    SYSDATETIME() AS Original,
    CONVERT(smalldatetime, SYSDATETIME()) AS Converted;

Ergebnis:

+-----------------------------+---------------------+
| Original                    | Converted           |
|-----------------------------+---------------------|
| 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 |
+-----------------------------+---------------------+

Beispiel 3 – Konvertieren von SYSDATETIME() in datetimeoffset Datentyp

In diesem Beispiel konvertieren wir das Datum in ein datetimeoffset Datentyp.

SELECT 
    SYSDATETIME() AS Original,
    CONVERT(datetimeoffset, SYSDATETIME()) AS Converted;

Ergebnis:

+-----------------------------+------------------------------------+
| Original                    | Converted                          |
|-----------------------------+------------------------------------|
| 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 |
+-----------------------------+------------------------------------+

Beispiel 4 – Konvertieren von SYSDATETIME() in den Zeitdatentyp

Sie sind nicht darauf beschränkt, die Datumskomponente des Werts anzuzeigen. Sie können es auch in eine Zeit umwandeln Datentyp, sodass nur die Zeitkomponente zurückgegeben wird. So:

SELECT 
    SYSDATETIME() AS Original,
    CONVERT(time, SYSDATETIME()) AS Converted;

Ergebnis:

+-----------------------------+------------------+
| Original                    | Converted        |
|-----------------------------+------------------|
| 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 |
+-----------------------------+------------------+

Beispiel 5 – Konvertieren von SYSDATETIMEOFFSET()

Die vorherigen Beispiele verwenden alle dieselbe eingebaute Funktion, um den Datums-/Uhrzeitwert zu generieren, aber natürlich muss er nicht von dieser einen Funktion generiert werden. Hier ist ein Beispiel mit SYSDATETIMEOFFSET() :

SELECT 
    SYSDATETIMEOFFSET() AS Original,
    CONVERT(date, SYSDATETIMEOFFSET()) AS Converted;

Ergebnis:

+------------------------------------+----------------------+
| Original                           | Converted            |
|------------------------------------+----------------------|
| 2018-06-07 09:12:27.3660685 +10:00 | 2018-06-07           |
+------------------------------------+----------------------+

Beispiel 6 – Konvertieren aus einer Datenbankabfrage

Hier ist ein Beispiel für die Konvertierung des Datums, das aus einer Spalte in der WideWorldImporters-Beispieldatenbank abgerufen wird:

USE WideWorldImporters;
SELECT DISTINCT TOP 10 
    LastEditedWhen, 
    CONVERT(date, LastEditedWhen) AS 'Converted'
FROM Sales.CustomerTransactions;

Ergebnis:

+-----------------------------+-------------+
| LastEditedWhen              | Converted   |
|-----------------------------+-------------|
| 2013-01-02 11:30:00.0000000 | 2013-01-02  |
| 2013-01-03 11:30:00.0000000 | 2013-01-03  |
| 2013-01-04 11:30:00.0000000 | 2013-01-04  |
| 2013-01-05 11:30:00.0000000 | 2013-01-05  |
| 2013-01-06 11:30:00.0000000 | 2013-01-06  |
| 2013-01-08 11:30:00.0000000 | 2013-01-08  |
| 2013-01-09 11:30:00.0000000 | 2013-01-09  |
| 2013-01-10 11:30:00.0000000 | 2013-01-10  |
| 2013-01-11 11:30:00.0000000 | 2013-01-11  |
| 2013-01-12 11:30:00.0000000 | 2013-01-12  |
+-----------------------------+-------------+

Beachten Sie, dass Sie nicht darauf beschränkt sind, nur zwischen zwei verschiedenen Datumsformaten zu konvertieren. Wenn Sie beispielsweise ein Datum als Zeichenfolge gespeichert haben, können Sie auch CONVERT() verwenden zum Konvertieren von einer Zeichenfolge in ein Datum sowie in jeden anderen Datentyp, in den Sie möglicherweise konvertieren müssen.

Ich habe auch einen Beitrag geschrieben, der zeigt, wie man mit CAST() zwischen Datumsformaten konvertiert Funktion mit den gleichen Beispielen wie oben.