Datumsformate mit CONVERT
Die ultimative Referenz für die Formatierung von Datums- und Zeitwerten mit der CONVERT-Funktion – inklusive aller relevanten Formatcodes und Beispielen.
Syntax & Funktionsweise
Die CONVERT-Funktion wandelt einen Ausdruck von einem Datentyp in einen anderen um. Für Datumsformate wird ein Style-Code (Formatcode) verwendet, der das Ausgabeformat bestimmt.
- data_type: Zieldatentyp (meist
VARCHARoderNVARCHAR). - expression: Das Datum (z. B.
GETDATE(),SYSDATETIME()oder eine Datumsspalte). - style: Der Formatcode (siehe Tabelle).
Die wichtigsten Formatcodes im Überblick
| Style-Code | Format (Ausgabe) | Beispiel (für 2026-05-08 14:30:00) | Typ |
|---|---|---|---|
| 104 | dd.mm.yyyy | 08.05.2026 | Deutsch (mit Punkten) |
| 105 | dd-mm-yyyy | 08-05-2026 | Deutsch (mit Bindestrichen) |
| 103 | dd/mm/yyyy | 08/05/2026 | Britisch/Französisch |
| 101 | mm/dd/yyyy | 05/08/2026 | US-amerikanisch |
| 102 | yyyy.mm.dd | 2026.05.08 | ANSI (mit Punkten) |
| 112 | yyyymmdd | 20260508 | ISO (kompakt) – ideal für Dateinamen |
| 23 | yyyy-mm-dd | 2026-05-08 | ISO 8601 (nur Datum) |
| 20 | yyyy-mm-dd HH:mi:ss | 2026-05-08 14:30:00 | ODBC kanonisch (Datum + Zeit) |
| 21 | yyyy-mm-dd HH:mi:ss.mmm | 2026-05-08 14:30:00.000 | ODBC mit Millisekunden |
| 8 | HH:mi:ss | 14:30:00 | Nur Zeit (24h) |
| 14 | HH:mi:ss:mmm | 14:30:00:000 | Zeit mit Millisekunden |
| 126 | yyyy-mm-ddThh:mi:ss.mmm | 2026-05-08T14:30:00.000 | ISO 8601 (mit T) |
| 130 | dd mon yyyy hh:mi:ss:mmmAM/PM | 08 May 2026 02:30:00:000PM | Hijri (islam. Kalender) |
| 131 | dd/mm/yyyy hh:mi:ss:mmmAM/PM | 08/05/2026 02:30:00:000PM | Hijri (mit Schrägstrichen) |
Beispiele mit CONVERT im Einsatz
Deutsche Formate (Punkte)
-- dd.mm.yyyy
SELECT CONVERT(VARCHAR(10), GETDATE(), 104) AS Datum;
-- Ergebnis: 08.05.2026
-- dd-mm-yyyy
SELECT CONVERT(VARCHAR(10), GETDATE(), 105);
ISO-Formate für Sortierung
-- yyyy-mm-dd (ISO)
SELECT CONVERT(VARCHAR(10), GETDATE(), 23);
-- yyyymmdd (kompakt)
SELECT CONVERT(VARCHAR(8), GETDATE(), 112);
Datum + Uhrzeit
-- yyyy-mm-dd HH:mi:ss
SELECT CONVERT(VARCHAR(19), GETDATE(), 20);
-- Mit Millisekunden
SELECT CONVERT(VARCHAR(23), GETDATE(), 21);
Nur Uhrzeit
-- HH:mi:ss
SELECT CONVERT(VARCHAR(8), GETDATE(), 8);
-- Mit Millisekunden
SELECT CONVERT(VARCHAR(12), GETDATE(), 14);
Von String zu Datum – die Umkehrrichtung
CONVERT kann nicht nur Datumsangaben formatieren, sondern auch Zeichenketten in echte Datumsdatentypen umwandeln. Dabei ist der Style-Code entscheidend für die korrekte Interpretation.
-- Deutscher String (dd.mm.yyyy) in DATE
DECLARE @dateStr NVARCHAR(10) = '08.05.2026';
SELECT CONVERT(DATE, @dateStr, 104) AS DeutschesDatum;
-- ISO-String (yyyy-mm-dd) in DATETIME2
DECLARE @isoStr NVARCHAR(10) = '2026-05-08';
SELECT CONVERT(DATETIME2, @isoStr, 126);
Alle Formatcodes ab SQL Server 2012 (komplett)
📋 Vollständige Liste der Style-Codes (zum Aufklappen)
| Style | Format | Typ |
|---|---|---|
| 1 | mm/dd/yy | US |
| 2 | yy.mm.dd | ANSI |
| 3 | dd/mm/yy | Britisch/Französisch |
| 4 | dd.mm.yy | Deutsch |
| 5 | dd-mm-yy | Italienisch |
| 6 | dd Mon yy | Abgekürzter Monat |
| 7 | Mon dd, yy | Monat Tag, Jahr |
| 10 | mm-dd-yy | US |
| 11 | yy/mm/dd | Japanisch |
| 12 | yymmdd | ISO kompakt |
| 101 | mm/dd/yyyy | US (4-stelliges Jahr) |
| 102 | yyyy.mm.dd | ANSI |
| 103 | dd/mm/yyyy | Britisch/Franz. |
| 104 | dd.mm.yyyy | Deutsch |
| 105 | dd-mm-yyyy | Italienisch |
| 106 | dd Mon yyyy | Abgekürzter Monat |
| 107 | Mon dd, yyyy | Monat Tag, Jahr |
| 108 | HH:mi:ss | Zeit (24h) |
| 109 | Mon dd yyyy HH:mi:ss:mmmAM/PM | Standard mit Millisek. |
| 110 | mm-dd-yyyy | US |
| 111 | yyyy/mm/dd | Japanisch |
| 112 | yyyymmdd | ISO (kompakt) |
| 113 | dd Mon yyyy HH:mi:ss:mmm | Europa mit Millisek. |
| 114 | HH:mi:ss:mmm | Zeit mit Millisek. |
| 120 | yyyy-mm-dd HH:mi:ss | ODBC kanonisch |
| 121 | yyyy-mm-dd HH:mi:ss.mmm | ODBC mit Millisek. |
| 126 | yyyy-mm-ddThh:mi:ss.mmm | ISO 8601 |
| 127 | yyyy-mm-ddThh:mi:ss.mmmZ | ISO 8601 mit Zeitzone |
| 130 | dd mon yyyy hh:mi:ss:mmmAM/PM | Hijri |
| 131 | dd/mm/yyyy hh:mi:ss:mmmAM/PM | Hijri |
Alternativen: FORMAT vs. CONVERT
CONVERT (empfohlen für Performance)
- Sehr schnell (kleiner Overhead)
- Abhängig von festen Style-Codes
- Nur vordefinierte Formate möglich
- Ideal für große Datenmengen
FORMAT (ab 2012, flexibel)
- Langsamer (CLR-basiert)
- Unterstützt .NET-Formatstrings (z. B. "dddd, MMMM yyyy")
- Kultur-abhängig (z. B. "de-DE", "en-US")
- Für kleine Ergebnismengen oder Berichte geeignet
-- FORMAT Beispiel (flexibel, aber langsamer)
SELECT FORMAT(GETDATE(), 'dddd, dd. MMMM yyyy', 'de-DE') AS DeutschLang;
-- Ergebnis: Donnerstag, 08. Mai 2026
-- Vergleich: CONVERT ist ca. 3-5x schneller
SELECT CONVERT(VARCHAR(10), GETDATE(), 104);
Häufige Fehler und deren Lösung
❌ Fehler: "Die Konvertierung eines nvarchar-Datentyps in einen datetime-Datentyp führte zu einem Wert außerhalb des gültigen Bereichs."
Ursache: Der übergebene String entspricht nicht dem erwarteten Format (z. B. deutscher String mit Style 101).
Lösung: Verwenden Sie den passenden Style-Code für Ihre Eingabe.
❌ Problem: Falsches Datum (Monat/Tag vertauscht)
Ursache: Unterschiedliche Ländereinstellungen. Beispiel: "05/08/2026" wird mit Style 101 als 5. August interpretiert, mit Style 103 als 8. Mai.
Lösung: Nutzen Sie immer den expliziten Style-Code – vertrauen Sie nicht auf die Standardeinstellungen der Sitzung.
-- Sicheres Parsen: Style immer angeben
DECLARE @input NVARCHAR(10) = '08.05.2026';
SELECT CONVERT(DATE, @input, 104); -- sicher: deutsch
-- Unsicher: Kein Style (hängt von Spracheinstellung ab)
SELECT CONVERT(DATE, @input); -- riskant