Course
Beherrschen von SQL-Datumsvergleichen: Abfrage nach Daten, die größer als ein bestimmtes Datum sind
Für eine effektive Datenbankverwaltung und -analyse ist es wichtig zu wissen, wie man nach Daten sucht, die größer als ein bestimmtes Datum sind. Dieses Tutorial bietet einen umfassenden Leitfaden für die Durchführung von Datumsvergleichen in SQL in verschiedenen SQL-Datenbanksystemen, darunter SQL Server, PostgreSQL und Oracle. Ganz gleich, ob du mit der Analyse historischer Daten, der Erstellung von Berichten oder dem Filtern von Datensätzen zu tun hast, die Beherrschung dieser Technik wird deine SQL-Abfragefähigkeiten verbessern.
Am Ende dieses Handbuchs wirst du in der Lage sein:
- Verstehe die Feinheiten der Datumsformate und -funktionen in verschiedenen SQL-Datenbanken, einschließlich SQL Server, PostgreSQL und Oracle.
- Wende praktische Beispiele auf reale Szenarien an.
Wenn du als Datenanalytiker/in oder Datenwissenschaftler/in bereit bist, mehr zu lernen, empfehle ich dir die Teilnahme am SQL Fundamentals Skill Track von DataCamp, um dich mit der Abfrage von Daten aus Datenbanken vertraut zu machen. Du kannst auch den Kurs Erstellen von PostgreSQL-Datenbanken belegen, um die Besonderheiten von PostgreSQL zu lernen.
Einführung in SQL-Datum-Vergleiche
Der Datumsvergleich ist in SQL wichtig, da er es Datenexperten ermöglicht, Daten während der Analyse zu filtern und zu sortieren. Die Methode ist besonders nützlich für die Finanzberichterstattung oder die Bestandsverwaltung, die eine Trendanalyse erfordert.
Der SQL-Operator "größer als" (>
) wird bei Datumsangaben verwendet, um zwei Datumswerte zu vergleichen. Wenn du den Operator "größer als" in eine SQL-Abfrage mit Datumsangaben einfügst, gibt die Abfrage Datensätze zurück, deren Datum später als das angegebene Datum liegt. Die folgende Abfrage gibt zum Beispiel Zeilen in der Tabelle Orders
zurück, bei denen OrderDate
später als 2023-01-01
ist.
SELECT *
FROM Orders
WHERE OrderDate > '2023-01-01';
Beginnen wir mit einem kurzen Überblick über die grundlegenden SQL-Operatoren, die zum Filtern von Daten verwendet werden können. Diese Operatoren werden auch in unserem Spickzettel zu den SQL-Grundlagen behandelt, den du dir ansehen kannst, bevor du die folgenden Beispiele ausprobierst.
Äquivalent zu (=)
Der =
Operator wird in SQL verwendet, um zu vergleichen, ob zwei Werte gleich sind. Nachfolgend findest du ein Beispiel, in dem der Operator mit einem Datumswert verwendet wird. Die SQL-Abfrage gibt Zeilen in der Tabelle Orders
zurück, in denen OrderDate
gleich 2023-01-01
ist.
-- Select all orders placed on January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate = '2023-01-01';
Nicht gleich (!= oder <>)
Der !=
oder <>
Operator prüft zwei Werte und gibt denjenigen zurück, der nicht mit dem referenzierten Wert übereinstimmt. Wenn du zum Beispiel einen Datumswert angibst, gibt der !=
oder <>
Operator Zeilen zurück, die nicht mit dem referenzierten Datum übereinstimmen. Du kannst auch unseren SQL NOT EQUAL Operator lesen: A Beginner's Guide Tutorial, um die Feinheiten zu lernen.
-- Select all orders that were not placed on January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate != '2023-01-01';
-- Alternative syntax using <>
SELECT *
FROM Orders
WHERE OrderDate <> '2023-01-01';
Weniger als (<)
Der <
Operator wird in SQL verwendet, um zu prüfen, ob der Wert auf der linken Seite kleiner ist als auf der rechten. Wenn du sie in einer SQL-Abfrage mit Datumswerten verwendest, gibt die Abfrage Datensätze zurück, deren Datum vor dem angegebenen Datum liegt. Die folgende Abfrage gibt zum Beispiel Zeilen in der Tabelle Orders
zurück, bei denen OrderDate
früher als 2023-01-01
ist.
-- Select all orders placed before January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate < '2023-01-01';
Größer als oder gleich (>=)
Der >=
Operator prüft, ob die Werte auf der linken Seite des Operators größer oder gleich dem Wert auf der rechten Seite sind. Wenn der Operator in SQL verwendet wird, um einen Datumswert abzufragen, werden nur Datensätze zurückgegeben, deren Datumswerte gleich oder größer als der Wert sind, auf den verwiesen wird.
-- Select all orders placed on or after January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate >= '2023-01-01';
Weniger als oder gleich (<=)
Der <=
Operator wird in SQL verwendet, um zu prüfen, ob die Werte auf der linken Seite des Operators kleiner oder gleich dem Wert auf der rechten Seite sind. Wenn der Operator verwendet wird, um einen Datumswert abzufragen, werden nur Datensätze zurückgegeben, deren Datumswerte gleich oder kleiner als der Wert sind, auf den verwiesen wird.
-- Select all orders placed on or before January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate <= '2023-01-01';
Datumsvergleich in SQL Server
Wir können Daten in SQL Server mit den folgenden Operatoren vergleichen: <
, <=
, >
, >=
, und =
. Wir werden jedoch die folgenden Themen behandeln:
Verwendung des "Größer als"-Operators (>)
Der "Größer als"-Operator (>
) wird in SQL Server verwendet, um Daten herauszufiltern, die später liegen als das Datum, das auf der rechten Seite des Operators verglichen wird. Die folgende Abfrage filtert zum Beispiel die Tabelle Orders
und gibt Datensätze von Bestellungen zurück, die nach OrderDate
2023-01-01
aufgegeben wurden.
-- Select all orders delivered after January 1, 2023
SELECT *
FROM Orders
WHERE DeliveryDate > '2023-01-01';
Verwendung der Funktion GETDATE()
Die Funktion GETDATE()
in SQL Server gibt das aktuelle Datum zurück, wie es im System des Benutzers gespeichert ist. Daher kannst du diese Funktion verwenden, um Daten abzufragen und Zeilen herauszufiltern, deren Datum größer als das aktuelle Datum ist.
-- Select all orders delivered after the current date and time
SELECT *
FROM Orders
WHERE DeliveryDate > GETDATE();
BETWEEN für Datumsbereiche verwenden
Der BETWEEN
Operator in SQL wird verwendet, um Werte zwischen einem bestimmten Bereich zu filtern. Wenn du sie in SQL Server mit Datumsangaben verwendest, kannst du Zeilen filtern, die Daten innerhalb des angegebenen Datums enthalten. Die Ergebnisse enthalten sowohl das Start- als auch das Enddatum wie in der Abfrage angegeben.
-- Select all orders delivered between January 1, 2023, and December 31, 2023
SELECT *
FROM Orders
WHERE DeliveryDate BETWEEN '2023-01-01' AND '2023-12-31';
CAST und CONVERT für Datumsbereiche verwenden
Du kannst auch die Funktionen CAST
und CONVERT
verwenden, um Fehler zu vermeiden. Diese Funktionen sorgen dafür, dass die Datumswerte richtig interpretiert und formatiert werden.
-- Convert a string to a date
SELECT CAST('2023-06-26' AS DATE) AS ConvertedDate;
-- Convert a string to a datetime
SELECT CAST('2023-06-26 14:30:00' AS DATETIME) AS ConvertedDateTime;
-- Convert a string to a date using CONVERT
SELECT CONVERT(DATE, '2023-06-26') AS ConvertedDate;
-- Convert a string to a datetime using CONVERT
SELECT CONVERT(DATETIME, '2023-06-26 14:30:00') AS ConvertedDateTime;
Datumsvergleich in PostgreSQL
PostgreSQL hat einige verschiedene Klauseln, um Daten zu vergleichen. Wir besprechen einige davon im Folgenden.
Verwendung des "Größer als"-Operators (>)
Ähnlich wie in der SQL Server-Datenbank filtert der >
Operator in PostgreSQL das Datum, das größer als das Vergleichsdatum ist.
-- Select all orders placed after January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate > '2023-01-01';
Verwendung der EXTRACT-Funktion
Die Funktion EXTRACT
wird in PostgreSQL verwendet, um Datumsfelder wie Jahr, Monat oder Tag abzurufen. In der folgenden Abfrage filtert die EXTRACT
Klausel Datensätze für das Jahr 2023.
-- Select all orders placed in the year 2023
SELECT *
FROM Orders
WHERE EXTRACT(YEAR FROM OrderDate) = 2023;
Verwendung der Funktion INTERVALL
Die Funktion INTERVAL
wird in PostgreSQL verwendet, um einige Datumsberechnungen durchzuführen. INTERVAL
ermöglicht es dir, bestimmte Zeitspannen zu einem Datum hinzuzufügen oder davon abzuziehen.
-- Select all orders placed in the last 30 days
SELECT *
FROM Orders
-- Filter orders placed within the last 30 days from the current date
WHERE OrderDate > NOW() - INTERVAL '30 days';
Verwendung der Funktion DATE_PART
Mit der Funktion DATE_PART
kannst du ein Teilfeld aus dem Datumswert extrahieren. Dieses Unterfeld kann entweder das Datum oder die Uhrzeit sein. Die folgende Abfrage gibt die im März aufgegebenen Bestellungen zurück und ergibt einen doppelt genauen Wert von 3 für den dritten Monat.
-- Select all orders placed in March
SELECT *
FROM Orders
WHERE DATE_PART('month', OrderDate) = 3;
Verwendung der Funktion TO_DATE
Die Funktion TO_DATE
in PostgreSQL wandelt eine angegebene Zeichenkette in einen Datumswert um, der auf dem angegebenen Format basiert. In der folgenden Abfrage wird der Datumswert als String angegeben. Du konvertierst also als Datum in das Format YYYY-MM-DD
.
-- Select all orders placed on January 1, 2023, using a string date
SELECT *
FROM Orders
WHERE OrderDate = TO_DATE('2023-01-01', 'YYYY-MM-DD');
BETWEEN für Datumsbereiche verwenden
Wie SQL Server filtert die BETWEEN-Klausel in PostgreSQL Daten innerhalb eines bestimmten Bereichs. Bei Werten, die Datumsangaben enthalten, filtert die Funktion BETWEEN
Zeilen zwischen den angegebenen Datumsangaben und gibt sie zurück. Diese Daten sind auch in den Ergebnissen enthalten.
-- Select all orders placed between January 1, 2023, and December 31, 2023
SELECT *
FROM Orders
WHERE OrderDate BETWEEN '2023-01-01' AND '2023-12-31';
Datumsvergleich in Oracle
Verwendung des "Größer als"-Operators (>)
Der >
Operator filtert Daten heraus, die später als das Vergleichsdatum liegen.
-- Select all active users with an end date in the future
SELECT *
FROM Users
-- Filter users with status 'Active'
WHERE Status = 'Active'
-- Ensure the end date is in the future
AND EndDate > SYSDATE;
Umgang mit NULL-Daten und komplexen Bedingungen
Beim Vergleichen von Daten in einer Oracle-Datenbank ist es wichtig, komplexe Szenarien wie leere Daten anzugeben. In diesem Fall verwenden wir die IS NULL
Klausel, um Datensätze zu filtern, die kein Datum enthalten.
-- Select all active users with either a future end date or no end date (NULL)
SELECT *
FROM Users
-- Filter users with status 'Active'
WHERE Status = 'Active'
-- Ensure the end date is either in the future or is NULL (no end date)
AND (EndDate > SYSDATE OR EndDate IS NULL);
BETWEEN für Datumsbereiche verwenden
Die BETWEEN
Klausel wird in Oracle auch verwendet, um Daten innerhalb eines bestimmten Bereichs zu filtern. Bei Werten, die ein Datum enthalten, filtert die Funktion BETWEEN
die Datensätze zwischen den angegebenen Daten und gibt sie zurück. Diese Daten sind auch in den Ergebnissen enthalten.
-- Select all active users with an end date between the current date and a specified future date (e.g., end of the year)
SELECT *
FROM Users
-- Filter users with status 'Active'
WHERE Status = 'Active'
-- Ensure the end date is between the current date and a specified future date (e.g., December 31, 2023)
AND EndDate BETWEEN SYSDATE AND DATE '2023-12-31';
Häufige Fallstricke und bewährte Praktiken
Ich bin auf Probleme mit Datumsangaben und dem Operator "größer als" in SQL gestoßen. Hier sind einige häufige Fehler, die ich entdeckt habe, und Tipps, wie du sie vermeiden kannst.
Inkonsistente Datumsformate
Wenn du in deinen Abfragen inkonsistente Datumsformate verwendest, führt das zu Fehlern. Du erhältst möglicherweise nicht die gewünschten Ergebnisse, wenn du Datumsformate wie YYYY-MM-DD
und MM-DD-YYYY
mischst.
Um diese Probleme zu vermeiden, solltest du immer das Standard-Datumsformat verwenden. Du kannst das Datum auch in dein bevorzugtes Format oder nach lokalen Konventionen konvertieren, indem du TO_DATE
in PostgreSQL- oder Oracle-Datenbanken verwendest. Für SQL Server kannst du die Funktionen CAST
und CONVERT
verwenden.
-- Convert a string to a date
SELECT CAST('2023-06-26' AS DATE) AS ConvertedDate;
-- Convert a string to a datetime
SELECT CAST('2023-06-26 14:30:00' AS DATETIME) AS ConvertedDateTime;
-- Convert a string to a date using CONVERT
SELECT CONVERT(DATE, '2023-06-26') AS ConvertedDate;
-- Convert a string to a datetime using CONVERT
SELECT CONVERT(DATETIME, '2023-06-26 14:30:00') AS ConvertedDateTime;
Umgang mit Zeitzonen
Wenn du Daten über mehrere Zeitzonen hinweg bearbeitest, erhältst du möglicherweise ungenaue Ergebnisse. Außerdem kann die Nichtberücksichtigung von Zeitzonenunterschieden bei der Datumsumrechnung zu Fehlern führen.
Deshalb empfehle ich dir, deine Daten in UTC (Coordinated Universal Time) zu speichern und die eingebauten Zeitzonenfunktionen zu verwenden, um Daten umzurechnen.
-- Store dates in UTC and convert to local time zone
SELECT *
FROM Orders
-- Filter orders where the OrderDate in UTC is greater than the current date in the 'America/New_York' time zone
WHERE OrderDate AT TIME ZONE 'UTC' > SYSDATE AT TIME ZONE 'America/New_York';
-- Use time zone functions for accurate comparison
SELECT *
FROM Users
-- Filter users where the EndDate in UTC is greater than the current date in UTC
WHERE EndDate AT TIME ZONE 'UTC' > SYSDATE AT TIME ZONE 'UTC';
Vermeide häufige Fehler bei Daten
Wenn du mit Daten arbeitest, ist es wichtig, Fehler zu vermeiden, indem du nur die Werte abrufst, die du für deine Analyse brauchst. Du kannst zum Beispiel die Zeitkomponente in einem Datumswert weglassen, wenn sie für deine Analyse irrelevant ist. Behandle die NULL
Werte explizit, um Fehler zu vermeiden, vor allem, wenn Datumswerte den Fehler enthalten können.
Schreiben von lesbaren und wartbaren Abfragen
Es kann sein, dass du komplexe und verschachtelte Abfragen schreibst, was es schwierig macht, die verschiedenen Klauseln zu lesen und zu verfolgen. Wenn du keine Kommentare in deinen Code einfügst, ist es auch schwer zu erklären, was er tut.
Daher empfehle ich dir, Kommentare einzufügen, die die Logik hinter den Klauseln erklären. Um die Abfragen lesbar zu machen, kannst du auch einfache Unterabfragen oder Common Table Expressions (CTEs) verwenden. In unserem Kurs Reporting in SQL erfährst du mehr über das Schreiben lesbarer und wartbarer Abfragen für Analysen und Berichte.
Ein Hinweis darauf, warum sich die SQL-Methoden unterscheiden
Die Vielfalt der SQL-Methoden für Datumsvergleiche in verschiedenen Datenbanksystemen wie SQL Server, PostgreSQL und Oracle ergibt sich aus der einzigartigen Entwicklung und Designphilosophie der einzelnen Datenbankmanagementsysteme. Jedes System wurde unabhängig voneinander entwickelt und entsprach unterschiedlichen Nutzerbedürfnissen und Kompatibilitätsanforderungen, was zu unterschiedlichen Implementierungen von SQL-Standards und zusätzlichen proprietären Funktionen führte.
Zum Beispiel:
- Der von Microsoft entwickelte SQL Server verfügt über Funktionen und eine Syntax, die sich eng an andere Microsoft-Produkte anlehnt und auf Integration und Benutzerfreundlichkeit im Windows-Ökosystem abzielt.
- PostgreSQL ist ein Open-Source-Projekt mit einem starken Fokus auf Erweiterbarkeit. Diese Flexibilität fördert eine Vielzahl von Datumsfunktionen und Operatoren, die von der Community optimiert oder erweitert werden können.
- Oracle konzentriert sich in der Regel auf hohe Skalierbarkeit und Zuverlässigkeit für Unternehmensanwendungen, was zu spezifischen Optimierungen bei der Verarbeitung von Daten und anderen Datentypen führt, oft mit dem Fokus auf komplexe, hochvolumige Transaktionsumgebungen.
Fazit
Ich möchte dich ermutigen, die verschiedenen Fähigkeiten zu üben, damit du weißt, wann du die SQL-Funktionen in realen Szenarien anwenden musst. Ziehe in Erwägung, die DataCamp-Kurse SQL-Grundlagen und SQL-Mittelstufe zu besuchen. Ich empfehle auch den Kurs Associate Data Analyst in SQL für angehende Datenanalysten und Datenwissenschaftler, der dir hilft, die verschiedenen Analysetechniken zu beherrschen. Diese Kurse helfen dir auch bei der Vorbereitung auf die SQL Associate-Zertifizierung, die sich gut in deinem Lebenslauf macht.
Erhalte eine Top-SQL-Zertifizierung
Stelle deine SQL-Kenntnisse unter Beweis und bringe deine Datenkarriere voran.
Häufig gestellte Fragen
Was ist ein Vergleichsoperator?
Die Vergleichsoperatoren vergleichen zwei Werte und geben als Ergebnis zurück, ob die Werte des verglichenen Wertes wahr oder falsch sind.
Welche Operatoren werden häufig in SQL-Datumswerten verwendet?
Die üblichen Operatoren, die in SQL-Datumswerten verwendet werden, sind gleich (=
), größer als (>
), kleiner als (<
), größer als oder gleich (>=
), weniger als oder gleich (<=
).
Wann wird der Operator BETWEEN in SQL verwendet?
Der BETWEEN
Operator filtert Datensätze innerhalb eines bestimmten Bereichs.
Welchen Operator sollte ich verwenden, wenn meine Daten NULL-Werte haben?
Du solltest die IS NULL
Klausel einfügen, um Nullwerte zu behandeln und Fehler in den Abfrageergebnissen zu vermeiden.
Was soll ich tun, wenn meine SQL-Abfrage beim Filtern des Datumswertes Fehler liefert?
Überprüfe, ob deine Daten im richtigen Format sind. Wenn nicht, konvertiere sie in ein einheitliches Format wie YYYY-MM-DD
.
Lerne SQL mit DataCamp
Course
SQL für Fortgeschrittene
Course
Daten in SQL verknüpfen
Der Blog