Beim Arbeiten mit Datenbanken in SQL ist es oft erforderlich, Datumszeichenfolgen mit unterschiedlichen Formaten in den Datentyp DATE umzuwandeln. Beispielsweise kann es vorkommen, dass Benutzereingaben oder Daten von externen Systemen in einem anderen als dem standardmäßigen Datumsformat vorliegen. Wenn diese nicht korrekt konvertiert werden, funktionieren die Abfragen möglicherweise nicht wie erwartet. In diesem Artikel wird detailliert beschrieben, wie Sie Datumszeichenfolgen mit bestimmten Formaten in SQL in den Datentyp DATE umwandeln können, unter Berücksichtigung der wichtigsten Datenbanken (MySQL, PostgreSQL, SQL Server, Oracle). Dadurch können Sie Datumsdaten konsistent verarbeiten und die Datenbankabfragen effizienter gestalten.
Verständnis der Datumsformate in SQL
Beim Umgang mit Datumsangaben in SQL ist es wichtig, die Unterschiede zwischen den verschiedenen Datumsformaten zu verstehen. Diese Formate variieren je nach Datenbank, wobei das Format YYYY-MM-DD
(Jahr-Monat-Tag) am häufigsten verwendet wird. Bei Benutzereingaben oder externen Datenquellen können jedoch abweichende Formate auftreten. Daher ist es notwendig, das genaue Datumsformat zu kennen und entsprechend anzuwenden.
Standardformat für Datumsangaben
Die meisten Datenbanksysteme verwenden das Format YYYY-MM-DD
als Standard für Datumsangaben. Dieses Format ist international standardisiert und wird empfohlen, um Daten konsistent zu behandeln.
Beispiele für unterschiedliche Datumsformate
Daten, die aus Benutzereingaben oder anderen Systemen stammen, können in den folgenden abweichenden Datumsformaten vorliegen:
MM/DD/YYYY
DD-MM-YYYY
YYYY/MM/DD
DD Mon YYYY
Warum die Umwandlung von Datumsformaten notwendig ist
Wenn Datumsformate nicht einheitlich sind, können Datumsvergleiche und -berechnungen ungenau sein. Außerdem liefern Abfragen möglicherweise nicht die erwarteten Ergebnisse. Daher ist es wichtig, Datumsformate richtig zu konvertieren.
Im Folgenden wird die grundlegende Syntax zur Umwandlung von Datumszeichenfolgen in den Datentyp DATE in SQL beschrieben.
Grundlegende Syntax zur Umwandlung von Datumsformaten
Um eine Datumszeichenfolge in SQL in den Datentyp DATE zu konvertieren, werden bestimmte Funktionen oder Syntaxelemente verwendet, die für jedes Datenbanksystem spezifisch sind. Nachfolgend finden Sie die grundlegende Syntax für die gängigsten Datenbanksysteme.
Die Funktion DATE_FORMAT in MySQL
In MySQL wird die Funktion STR_TO_DATE
verwendet, um eine Datumszeichenfolge in den Datentyp DATE zu konvertieren. Diese Funktion wandelt eine Zeichenfolge basierend auf dem angegebenen Format um.
SELECT STR_TO_DATE('31-12-2023', '%d-%m-%Y');
In diesem Beispiel wird die Datumszeichenfolge 31-12-2023
in den Datentyp DATE
umgewandelt.
Die Funktion TO_DATE in PostgreSQL
In PostgreSQL wird die Funktion TO_DATE
verwendet, um eine Datumszeichenfolge in den Datentyp DATE zu konvertieren.
SELECT TO_DATE('31-12-2023', 'DD-MM-YYYY');
In diesem Beispiel wird die Zeichenfolge 31-12-2023
in den Datentyp DATE
umgewandelt.
Die Funktion CONVERT in SQL Server
In SQL Server wird die Funktion CONVERT
verwendet, um eine Datumszeichenfolge in den Datentyp DATE zu konvertieren. Mit dieser Funktion wird das Format durch einen Stilcode festgelegt.
SELECT CONVERT(DATE, '12/31/2023', 101);
In diesem Beispiel wird die Zeichenfolge 12/31/2023
in den Datentyp DATE
umgewandelt.
Die Funktion TO_DATE in Oracle
In Oracle wird die Funktion TO_DATE
verwendet, um eine Datumszeichenfolge in den Datentyp DATE zu konvertieren.
SELECT TO_DATE('31-Dec-2023', 'DD-Mon-YYYY') FROM dual;
In diesem Beispiel wird die Zeichenfolge 31-Dec-2023
in den Datentyp DATE
umgewandelt.
Durch das Verständnis der grundlegenden Methoden zur Umwandlung von Datumsformaten in den verschiedenen Datenbanksystemen können Sie Datumsdaten präzise verarbeiten. Im Folgenden werden die spezifischen Methoden zur Umwandlung von Datumszeichenfolgen für jedes Datenbanksystem erläutert.
Wie Sie eine Datumszeichenfolge in MySQL konvertieren
In MySQL wird die Funktion STR_TO_DATE
verwendet, um eine Datumszeichenfolge in den Datentyp DATE zu konvertieren. Diese Funktion analysiert die Zeichenfolge basierend auf dem angegebenen Format und wandelt sie in den Datentyp DATE um.
Grundlegende Verwendung der Funktion STR_TO_DATE
Die Funktion STR_TO_DATE
wird wie folgt verwendet:
SELECT STR_TO_DATE('31-12-2023', '%d-%m-%Y');
In diesem Beispiel wird die Datumszeichenfolge 31-12-2023
in den Datentyp DATE
umgewandelt. Die Formatzeichen geben dabei an, welcher Teil der Zeichenfolge was darstellt:
%d
: Tag%m
: Monat%Y
: Jahr
Wie Sie mehrere Formate unterstützen
Wenn Sie Datumszeichenfolgen mit unterschiedlichen Formaten behandeln müssen, verwenden Sie entsprechende Formatzeichen für jede Variante.
SELECT STR_TO_DATE('2023/12/31', '%Y/%m/%d');
SELECT STR_TO_DATE('12-31-2023', '%m-%d-%Y');
In diesen Beispielen werden Zeichenfolgen mit unterschiedlichen Formaten in den Datentyp DATE
umgewandelt.
Beispiele aus der Praxis
In der Praxis kann die Funktion z.B. verwendet werden, um in einer Tabelle gespeicherte Datumszeichenfolgen umzuwandeln.
SELECT STR_TO_DATE(order_date, '%d-%m-%Y') AS formatted_date
FROM orders;
In diesem Beispiel wird die in der Spalte order_date
der Tabelle orders
gespeicherte Datumszeichenfolge in den Datentyp DATE
umgewandelt und als formatted_date
angezeigt.
Die Umwandlung von Datumsformaten in MySQL kann einfach mit der Funktion STR_TO_DATE
durchgeführt werden. Im nächsten Abschnitt wird beschrieben, wie Sie Datumszeichenfolgen in PostgreSQL umwandeln können.
Wie Sie eine Datumszeichenfolge in PostgreSQL konvertieren
In PostgreSQL wird die Funktion TO_DATE
verwendet, um eine Datumszeichenfolge in den Datentyp DATE zu konvertieren. Diese Funktion analysiert die Zeichenfolge basierend auf dem angegebenen Format und wandelt sie in den Datentyp DATE um.
Grundlegende Verwendung der Funktion TO_DATE
Die Funktion TO_DATE
wird wie folgt verwendet:
SELECT TO_DATE('31-12-2023', 'DD-MM-YYYY');
In diesem Beispiel wird die Datumszeichenfolge 31-12-2023
in den Datentyp DATE
umgewandelt. Die Formatzeichen geben dabei an, welcher Teil der Zeichenfolge was darstellt:
DD
: TagMM
: MonatYYYY
: Jahr
Wie Sie mehrere Formate unterstützen
Wenn Sie Datumszeichenfolgen mit unterschiedlichen Formaten behandeln müssen, verwenden Sie entsprechende Formatzeichen für jede Variante.
SELECT TO_DATE('2023/12/31', 'YYYY/MM/DD');
SELECT TO_DATE('12-31-2023', 'MM-DD-YYYY');
In diesen Beispielen werden Zeichenfolgen mit unterschiedlichen Formaten in den Datentyp DATE
umgewandelt.
Beispiele aus der Praxis
In der Praxis kann die Funktion z.B. verwendet werden, um in einer Tabelle gespeicherte Datumszeichenfolgen umzuwandeln.
SELECT TO_DATE(order_date, 'DD-MM-YYYY') AS formatted_date
FROM orders;
In diesem Beispiel wird die in der Spalte order_date
der Tabelle orders
gespeicherte Datumszeichenfolge in den Datentyp DATE
umgewandelt und als formatted_date
angezeigt.
Komplexere Umwandlungen
Datumszeichenfolgen, die spezielle Zeichen oder komplexere Formate enthalten, können ebenfalls mit den entsprechenden Formatzeichen umgewandelt werden.
SELECT TO_DATE('31-Dec-2023', 'DD-Mon-YYYY');
In diesem Beispiel wird die Zeichenfolge 31-Dec-2023
in den Datentyp DATE
umgewandelt.
Die Umwandlung von Datumsformaten in PostgreSQL kann einfach mit der Funktion TO_DATE
durchgeführt werden. Im nächsten Abschnitt wird beschrieben, wie Sie Datumszeichenfolgen in SQL Server umwandeln können.
Wie Sie eine Datumszeichenfolge in SQL Server konvertieren
In SQL Server wird die Funktion CONVERT
oder TRY_CONVERT
verwendet, um eine Datumszeichenfolge in den Datentyp DATE zu konvertieren. Diese Funktionen analysieren die Zeichenfolge basierend auf dem angegebenen Stilcode und wandeln sie in den Datentyp DATE um.
Grundlegende Verwendung der Funktion CONVERT
Die Funktion CONVERT
wird wie folgt verwendet:
SELECT CONVERT(DATE, '12/31/2023', 101);
In diesem Beispiel wird die Datumszeichenfolge 12/31/2023
in den Datentyp DATE
umgewandelt. Der Stilcode 101
steht für das Datumsformat MM/DD/YYYY
.
Verwendung der Funktion TRY_CONVERT
Die Funktion TRY_CONVERT
gibt im Falle einer fehlgeschlagenen Umwandlung NULL zurück, sodass eine sichere Umwandlung versucht werden kann.
SELECT TRY_CONVERT(DATE, '31-12-2023', 105);
In diesem Beispiel wird die Datumszeichenfolge 31-12-2023
in den Datentyp DATE
umgewandelt. Der Stilcode 105
steht für das Format DD-MM-YYYY
.
Wie Sie mehrere Formate unterstützen
Wenn Sie Datumszeichenfolgen mit unterschiedlichen Formaten behandeln müssen, verwenden Sie entsprechende Stilcodes für jede Variante.
SELECT CONVERT(DATE, '2023/12/31', 111); -- YYYY/MM/DD
SELECT CONVERT(DATE, '12-31-2023', 110); -- MM-DD-YYYY
In diesen Beispielen werden Zeichenfolgen mit unterschiedlichen Formaten in den Datentyp DATE
umgewandelt.
Beispiele aus der Praxis
In der Praxis kann die Funktion z.B. verwendet werden, um in einer Tabelle gespeicherte Datumszeichenfolgen umzuwandeln.
SELECT CONVERT(DATE, order_date, 101) AS formatted_date
FROM orders;
In diesem Beispiel wird die in der Spalte order_date
der Tabelle orders
gespeicherte Datumszeichenfolge in den Datentyp DATE
umgewandelt und als formatted_date
angezeigt.
Liste der Datumsformat-Stilcodes
Nachfolgend sind einige gängige Stilcodes aufgeführt, die in SQL Server für Datumsformate verwendet werden:
- 101:
MM/DD/YYYY
- 102:
YYYY.MM.DD
- 103:
DD/MM/YYYY
- 104:
DD.MM.YYYY
- 105:
DD-MM-YYYY
Die Umwandlung von Datumsformaten in SQL Server kann einfach mit den Funktionen CONVERT
und TRY_CONVERT
durchgeführt werden. Im nächsten Abschnitt wird beschrieben, wie Sie Datumszeichenfolgen in Oracle umwandeln können.
Wie Sie eine Datumszeichenfolge in Oracle konvertieren
In Oracle-Datenbanken wird die Funktion TO_DATE
verwendet, um eine Datumszeichenfolge in den Datentyp DATE zu konvertieren. Diese Funktion analysiert die Zeichenfolge basierend auf dem angegebenen Format und wandelt sie in den Datentyp DATE um.
Grundlegende Verwendung der Funktion TO_DATE
Die Funktion TO_DATE
wird wie folgt verwendet:
SELECT TO_DATE('31-12-2023', 'DD-MM-YYYY') FROM dual;
In diesem Beispiel wird die Datumszeichenfolge 31-12-2023
in den Datentyp DATE
umgewandelt. Die Formatzeichen geben dabei an, welcher Teil der Zeichenfolge was darstellt:
DD
: TagMM
: MonatYYYY
: Jahr
Wie Sie mehrere Formate unterstützen
Wenn Sie Datumszeichenfolgen mit unterschiedlichen Formaten behandeln müssen, verwenden Sie entsprechende Formatzeichen für jede Variante.
SELECT TO_DATE('2023/12/31', 'YYYY/MM/DD') FROM dual;
SELECT TO_DATE('12-31-2023', 'MM-DD-YYYY') FROM dual;
In diesen Beispielen werden Zeichenfolgen mit unterschiedlichen Formaten in den Datentyp DATE
umgewandelt.
Beispiele aus der Praxis
In der Praxis kann die Funktion z.B. verwendet werden, um in einer Tabelle gespeicherte Datumszeichenfolgen umzuwandeln.
SELECT TO_DATE(order_date, 'DD-MM-YYYY') AS formatted_date
FROM orders;
In diesem Beispiel wird die in der Spalte order_date
der Tabelle orders
gespeicherte Datumszeichenfolge in den Datentyp DATE
umgewandelt und als formatted_date
angezeigt.
Komplexere Umwandlungen
Datumszeichenfolgen, die spezielle Zeichen oder komplexere Formate enthalten, können ebenfalls mit den entsprechenden Formatzeichen umgewandelt werden.
SELECT TO_DATE('31-Dec-2023', 'DD-Mon-YYYY') FROM dual;
In diesem Beispiel wird die Zeichenfolge 31-Dec-2023
in den Datentyp DATE
umgewandelt. Mon
steht für die abgekürzte Monatsform.
Liste der Formatzeichen
Nachfolgend sind einige gängige Formatzeichen aufgeführt, die in Oracle für Datumsformate verwendet werden:
YYYY
: Vierstellige JahreszahlMM
: Zweistellige MonatszahlDD
: Zweistellige TageszahlMon
: Abgekürzter Monatsname (z.B. Jan, Feb, Mär)HH24
: 24-Stunden-Format der UhrzeitMI
: MinutenSS
: Sekunden
Die Umwandlung von Datumsformaten in Oracle kann einfach mit der Funktion TO_DATE
durchgeführt werden. Im nächsten Abschnitt werden häufig auftretende Fehler bei der Umwandlung von Datumsformaten und ihre Debugging-Methoden beschrieben.
Fehlerbehandlung und Debugging-Tipps
Bei der Umwandlung von Datumszeichenfolgen in den Datentyp DATE können verschiedene Fehler auftreten, z.B. Formatinkonsistenzen oder ungültige Datumszeichenfolgen. In diesem Abschnitt werden einige Tipps zur Erkennung und Behandlung solcher Fehler vorgestellt.
Häufige Fehlerarten
Zu den häufigen Fehlern bei der Umwandlung von Datumsformaten gehören:
- Formatinkonsistenz: Dieser Fehler tritt auf, wenn das angegebene Format nicht mit der Datumszeichenfolge übereinstimmt.
- Ungültiges Datum: Dieser Fehler tritt auf, wenn versucht wird, ein ungültiges Datum (z.B. 2023-02-30) zu konvertieren.
- NULL-Werte: Dieser Fehler tritt auf, wenn eine NULL-Wert-Datumszeichenfolge konvertiert werden soll.
Erkennung und Behandlung von Fehlern
Nachfolgend werden Methoden zur Erkennung und Behandlung von Fehlern vorgestellt.
MySQL
In MySQL wird NULL zurückgegeben, wenn eine ungültige Datumszeichenfolge konvertiert wird. Um Standardwerte festzulegen, können Sie die Funktionen IFNULL
oder COALESCE
verwenden.
SELECT IFNULL(STR_TO_DATE(order_date, '%d-%m-%Y'), '1970-01-01') AS formatted_date
FROM orders;
In diesem Beispiel wird im Falle eines fehlgeschlagenen Konvertierungsversuchs der Standardwert 1970-01-01
zurückgegeben.
PostgreSQL
In PostgreSQL führt die Funktion TO_DATE
zu einer Ausnahme, wenn eine ungültige Datumszeichenfolge eingegeben wird. Sie können das TRY...EXCEPT
-Konstrukt verwenden, um Fehler abzufangen.
DO $$
BEGIN
SELECT TO_DATE('invalid-date', 'DD-MM-YYYY');
EXCEPTION
WHEN others THEN
RAISE NOTICE 'Invalid date format';
END $$;
In diesem Beispiel wird im Falle eines Fehlers eine Nachricht ausgegeben.
SQL Server
In SQL Server wird die Funktion TRY_CONVERT
verwendet, um NULL im Falle eines fehlgeschlagenen Konvertierungsversuchs zurückzugeben.
SELECT TRY_CONVERT(DATE, 'invalid-date', 105) AS formatted_date;
In diesem Beispiel wird eine ungültige Datumszeichenfolge als NULL zurückgegeben.
Oracle
In Oracle können Sie Fehler mit einem EXCEPTION
-Block behandeln.
BEGIN
SELECT TO_DATE('invalid-date', 'DD-MM-YYYY') FROM dual;
EXCEPTION
WHEN others THEN
DBMS_OUTPUT.PUT_LINE('Invalid date format');
END;
In diesem Beispiel wird im Falle eines Fehlers eine Nachricht ausgegeben.
Debugging-Tipps
Nachfolgend einige Tipps zur Fehlersuche bei Datumsformatfehlern:
- Überprüfen Sie die Richtigkeit der Formatzeichen.
- Vergewissern Sie sich, dass die eingegebene Datumszeichenfolge gültig ist.
- Überprüfen Sie, welche Datumsformate von der verwendeten Konvertierungsfunktion unterstützt werden.
Durch die Verwendung der korrekten Formatzeichen und gültiger Datumszeichenfolgen können Sie die Häufigkeit von Umwandlungsfehlern reduzieren. Im nächsten Abschnitt werden Anwendungsbeispiele und Übungsaufgaben zur Umwandlung von Datumszeichenfolgen in den Datentyp DATE vorgestellt.
Anwendungsbeispiele und Übungsaufgaben zur Umwandlung von Datumszeichenfolgen in den Datentyp DATE
Anwendungsbeispiel: Umwandlung von Datumszeichenfolgen mit verschiedenen Formaten
Angenommen, Sie haben eine Tabelle, die Datumszeichenfolgen in mehreren unterschiedlichen Formaten enthält. Im Folgenden wird gezeigt, wie Sie diese Zeichenfolgen in den Datentyp DATE konvertieren können.
Beispieldaten
Angenommen, Sie haben die folgende Tabelle events
.
CREATE TABLE events (
event_id INT,
event_date VARCHAR(20)
);
INSERT INTO events (event_id, event_date) VALUES
(1, '2023-12-31'),
(2, '31/12/2023'),
(3, 'December 31, 2023');
Beispiel für eine Umwandlungsabfrage
Die folgende Abfrage zeigt, wie Sie die verschiedenen Formate verarbeiten und in den Datentyp DATE konvertieren können.
SELECT event_id,
CASE
WHEN event_date LIKE '____-__-__' THEN STR_TO_DATE(event_date, '%Y-%m-%d')
WHEN event_date LIKE '__/__/____' THEN STR_TO_DATE(event_date, '%d/%m/%Y')
WHEN event_date LIKE '%____%' THEN STR_TO_DATE(event_date, '%M %d, %Y')
ELSE NULL
END AS formatted_date
FROM events;
In dieser Abfrage wird eine CASE
-Anweisung verwendet, um die verschiedenen Formate zu verarbeiten und die Datumszeichenfolgen in den Datentyp DATE umzuwandeln.
Übungsaufgaben
Üben Sie die Umwandlung von Datumszeichenfolgen mit den folgenden Aufgaben.
Übungsaufgabe 1
Schreiben Sie eine Abfrage, die die folgende Datumszeichenfolge in den Datentyp DATE umwandelt:
- Datumszeichenfolge:
15-08-2023
- Format:
DD-MM-YYYY
Übungsaufgabe 2
Schreiben Sie eine Abfrage, die die in der Spalte sale_date
der Tabelle sales
gespeicherten Datumszeichenfolgen in den Datentyp DATE umwandelt und als neue Spalte formatted_sale_date
anzeigt.
CREATE TABLE sales (
sale_id INT,
sale_date VARCHAR(20)
);
INSERT INTO sales (sale_id, sale_date) VALUES
(1, '08/15/2023'),
(2, '15-08-2023'),
(3, '2023.08.15');
- Die Formate der Datumszeichenfolgen sind wie folgt:
08/15/2023
:MM/DD/YYYY
15-08-2023
:DD-MM-YYYY
2023.08.15
:YYYY.MM.DD
Übungsaufgabe 3
Schreiben Sie eine Abfrage, die die in der Spalte birthday
der Tabelle birthdays
gespeicherten Datumszeichenfolgen in den Datentyp DATE umwandelt. Wenn eine ungültige Datumszeichenfolge enthalten ist, soll NULL zurückgegeben werden.
CREATE TABLE birthdays (
user_id INT,
birthday VARCHAR(20)
);
INSERT INTO birthdays (user_id, birthday) VALUES
(1, '1990-02-30'),
(2, '29-02-2020'),
(3, '15/08/1995');
- Die Formate der Datumszeichenfolgen sind wie folgt:
1990-02-30
:YYYY-MM-DD
29-02-2020
:DD-MM-YYYY
15/08/1995
:DD/MM/YYYY
Durch das Lösen dieser Aufgaben können Sie Ihre Kenntnisse in der Umwandlung von Datumszeichenfolgen vertiefen. Im nächsten Abschnitt folgt die Zusammenfassung des gesamten Artikels.
Zusammenfassung
In diesem Artikel wurde beschrieben, wie Sie Datumszeichenfolgen mit bestimmten Formaten in SQL in den Datentyp DATE umwandeln können. Wir haben die spezifischen Methoden für die wichtigsten Datenbanksysteme (MySQL, PostgreSQL, SQL Server, Oracle) erläutert und Hinweise zur Fehlerbehandlung und zum Debugging gegeben. Abschließend konnten Sie Ihr Wissen durch Anwendungsbeispiele und Übungsaufgaben weiter vertiefen.
Die Umwandlung von Datumsformaten ist ein wesentlicher Bestandteil bei der Arbeit mit Datenbanken. Eine korrekte Umwandlung stellt sicher, dass die Daten konsistent bleiben und die Abfragen zuverlässig funktionieren. Beachten Sie stets die folgenden Punkte:
- Verwenden Sie die richtigen Formatzeichen.
- Überprüfen Sie die Richtigkeit der eingegebenen Datumszeichenfolgen.
- Behandeln Sie ungültige Datumsangaben und Formatinkonsistenzen angemessen.
- Verstehen Sie die Funktionen und Syntax, die für jedes Datenbanksystem spezifisch sind, und wenden Sie sie an.
Nutzen Sie diese Kenntnisse und Fähigkeiten, um Datumsdaten in SQL korrekt und effizient zu verarbeiten und Ihre Datenbankverwaltung und -abfragen zu optimieren.