PostgreSQL Datumsfunktionen
Inhaltsverzeichnis
- Datum- und Zeit-Datentypen in PostgreSQL
- Ein Überblick über die Datums- und Zeitfunktionen in PostgreSQL
- Vergleich von Datums- und Zeitwerten
- Aktuelle Datums- und Zeitwerte abrufen
- Arithmetische Operationen auf Datums- und Zeitwerten
- Manipulation von Datums- und Zeitwerten
- Formatieren von Datums- und Zeitwerten
- Arbeiten mit PostgreSQL Datums- und Zeitfunktionen
Das Verständnis der Datums- und Zeitfunktionen in Ihrer Datenbank ist für eine effektive Datenanalyse und Berichterstattung unerlässlich. Lesen Sie weiter, um mehr über PostgreSQL-Datumsfunktionen zu erfahren.
Dieser Artikel behandelt einige der nützlichsten PostgreSQL Datums- und Zeitfunktionen und ihre Anwendungen in der Datenanalyse und im Berichtswesen. Die SQL-Datumsfunktionen erleichtern verschiedene Datenanalyseaufgaben, einschließlich der Verkaufsanalyse, der Finanzberichterstattung, der Website-Analyse und mehr.
Dieser Artikel stellt Ihnen die Werkzeuge in Form von PostgreSQL-Datums- und Zeitfunktionen vor, die zur Erfüllung dieser Aufgaben verwendet werden. Wir beginnen mit einem kurzen Überblick über die in PostgreSQL verfügbaren Datums- und Zeitdatentypen, bevor wir zu den Funktionen übergehen.
Schauen Sie sich unser SQL-Kochbuch an, das eine Vielzahl von SQL-Rezepten für PostgreSQL und andere Dialekte enthält. Sie sind eine wertvolle Ressource, die Sie als Lesezeichen speichern sollten, um beim Schreiben Ihrer Abfragen schnell nachschlagen zu können. Mehr über das Konzept eines SQL-Kochbuchs erfahren Sie hier.
Datum- und Zeit-Datentypen in PostgreSQL
In PostgreSQL gibt es verschiedene Datentypen, um Datums- und Zeitwerte zu speichern. Nachfolgend finden Sie eine Übersicht über die am häufigsten verwendeten Typen:
| Data Type | Usage | Format | Example |
|---|---|---|---|
| DATE | It stores date values that include a year (YYYY), month (MM), and day (DD). | YYYY-MM-DD | 2024-06-01 |
| TIME | It stores time values that include an hour (HH), minute (MM), and second (SS). | HH:MM:SS | 12:30:15 |
| TIMESTAMP | It stores date and time values. | YYYY-MM-DD HH:MM:SS | 2024-07-30 12:30:15 |
| INTERVAL | It stores an interval between two date/time values or an interval that can be added to or subtracted from a date/time value. | INTERVAL 'x YEAR x MONTH x DAY x HOUR x MINUTE x SECOND' | INTERVAL '2 YEARS 1 MONTH 3 DAYS 4 HOURS 1 MINUTE' |
Für Datenanalysen, die unterschiedliche Zeitzonen berücksichtigen müssen, bietet PostgreSQL Datentypen wie TIME WITH TIME ZONE (speichert Zeitwerte mit Zeitzoneninformationen) und TIMESTAMP WITH TIME ZONE (speichert Datums- und Zeitwerte mit Zeitzoneninformationen).
Lesen Sie unseren Artikel Ein Überblick über die PostgreSQL-Datentypen, um mehr über die in PostgreSQL verfügbaren Datentypen zu erfahren. Und wenn Sie mehr üben möchten, schauen Sie sich diese 19 Übungen in PostgreSQL mit detaillierten Lösungen an.
Wir werden alle oben genannten Datentypen verwenden, während wir die Datums- und Zeitfunktionen von PostgreSQL untersuchen. Fangen wir an!
Ein Überblick über die Datums- und Zeitfunktionen in PostgreSQL
Alle Datums- und Zeitfunktionen in PostgreSQL können in die folgenden Kategorien eingeteilt werden:
- Vergleich von Datums- und Zeitwerten
- Abrufen aktueller Datums- und Zeitwerte
- Arithmetische Operationen mit Datums- und Zeitwerten durchführen
- Manipulation von Datums- und Zeitwerten
- Formatierung von Datums- und Zeitwerten
In den folgenden Abschnitten sind alle relevanten Funktionen mit Beispielen aufgeführt.
Dies ist die sales Tabelle, die wir für unsere Beispiele verwenden werden:
| sale_id | sale_date | sale_time | sale_timestamp | shop_name | product_name | amount_sold |
|---|---|---|---|---|---|---|
| 1 | 2024-06-01 | 08:00:00 | 2024-06-01 08:00:00 | GreenGrocer | Apples | 100 |
| 2 | 2024-06-01 | 10:30:00 | 2024-06-01 10:30:00 | GreenGrocer | Bananas | 150 |
| 3 | 2024-06-01 | 11:45:00 | 2024-06-01 11:45:00 | GreenGrocer | Oranges | 200 |
| 4 | 2024-06-01 | 09:15:00 | 2024-06-01 09:15:00 | SuperMart | Charger | 6 |
| 5 | 2024-06-01 | 13:20:00 | 2024-06-01 13:20:00 | SuperMart | Headphones | 9 |
| 6 | 2024-06-01 | 14:45:00 | 2024-06-01 14:45:00 | SuperMart | Laptop | 11 |
| 7 | 2024-06-01 | 10:00:00 | 2024-06-01 10:00:00 | MegaMall | Keyboard | 5 |
| 8 | 2024-06-01 | 11:30:00 | 2024-06-01 11:30:00 | MegaMall | Mouse | 8 |
| 9 | 2024-06-01 | 12:45:00 | 2024-06-01 12:45:00 | MegaMall | Monitor | 10 |
| 10 | 2024-06-01 | 13:30:00 | 2024-06-01 13:30:00 | MegaMall | Printer | 6 |
Vergleich von Datums- und Zeitwerten
Um Datums- und Zeitwerte in PostgreSQL zu vergleichen, verwenden wir Standardvergleichsoperatoren. Zu diesen Operatoren gehören =, !=, <>, >, >=, <, <=, BETWEEN, und NOT BETWEEN.
Im Folgenden finden Sie Beispiele für die Verwendung der einzelnen Vergleichsoperatoren.
Gleichheitsoperator (=)
Frage: Wie viele Verkäufe gab es am 1. Juni 2024?
Antwort:
SELECT COUNT(*) AS count FROM sales WHERE sale_date = '2024-06-01';
| count |
|---|
| 10 |
Nicht-Gleichheitsoperator (!= oder <>)
Frage: Wie viele Verkäufe fanden nicht um 10:00:00 Uhr statt?
Antwort:
SELECT COUNT(*) AS count FROM sales WHERE sale_time != '10:00:00';
| count |
|---|
| 9 |
Operator "Größer als" (>)
Frage: Wie viele Verkäufe fanden nach dem 1. Juni 2024 um 10:00:00 Uhr statt?
Antwort:
SELECT COUNT(*) AS count FROM sales WHERE sale_timestamp > '2024-06-01 10:00:00';
| count |
|---|
| 6 |
Hinweis: Beim Vergleich von Daten in SQL bedeutet der Operator >, dass das Datum X weiter in der Zukunft (später) liegt als das Datum Y, wenn es größer als das Datum Y ist.
Operator "Größer als" oder "Gleich" (>=)
Frage: Wie viele Verkäufe fanden am oder nach 10:00:00 Uhr am 1. Juni 2024 statt?
Antwort:
SELECT COUNT(*) AS count FROM sales WHERE sale_timestamp >= '2024-06-01 10:00:00';
| count |
|---|
| 7 |
Hinweis: Beim Vergleich von Zeitstempeln in SQL bedeutet der Operator >=, dass, wenn der Zeitstempel X größer als oder gleich dem Zeitstempel Y ist, der Zeitstempel X weiter in der Zukunft (später) liegt als der Zeitstempel Y oder diesem entspricht.
Kleiner-als (<) Operator
Frage: Wie viele Verkäufe fanden vor 12:00:00 Uhr am 1. Juni 2024 statt?
Antwort:
SELECT COUNT(*) AS count FROM sales WHERE sale_timestamp < '2024-06-01 12:00:00';
| count |
|---|
| 7 |
Hinweis: Beim Vergleich von Zeitstempeln in SQL bedeutet der Operator <, dass, wenn Zeitstempel X kleiner als Zeitstempel Y ist, X zeitlich vor Y liegt.
Kleiner-als-gleich (<=) Operator
Frage: Wie viele Verkäufe fanden am oder vor dem 1. Juni 2024 um 12:00:00 Uhr statt?
Antwort:
SELECT COUNT(*) AS count FROM sales WHERE sale_timestamp <= '2024-06-01 12:00:00';
| count |
|---|
| 7 |
Hinweis: Beim Vergleich von Datums- oder Zeitangaben in SQL bedeutet der Operator <=, dass, wenn das Datum X kleiner oder gleich dem Datum Y ist, das Datum X zeitlich vor oder gleich dem Datum Y liegt.
BETWEEN-Operator
Frage: Wie viele Verkäufe fanden zwischen 10:00:00 und 14:00:00 Uhr statt?
Antwort:
SELECT COUNT(*) AS count FROM sales WHERE sale_timestamp BETWEEN '2024-06-01 10:00:00' AND '2024-06-01 14:00:00';
| count |
|---|
| 6 |
NOT BETWEEN-Operator
Frage: Wie viele Verkäufe fanden nicht zwischen 10:00:00 und 14:00:00 Uhr statt?
Antwort:
SELECT COUNT(*) AS count FROM sales WHERE sale_timestamp NOT BETWEEN '2024-06-01 10:00:00' AND '2024-06-01 14:00:00';
| count |
|---|
| 4 |
Gut zu wissen: Sie können die Ausgabe nach Datum, Uhrzeit oder Zeitstempel sortieren, indem Sie die entsprechende Spalte in die ORDER BY Klausel aufnehmen.
Schauen Sie sich diese Kochbücher an, um mehr zu erfahren:
- Wie man 2 Daten in der WHERE-Klausel in SQL vergleicht
- Wie man Datumswerte in SQL vergleicht
- Wie man Datumswerte in SQL vergleicht
- Sortieren nach Datum in PostgreSQL oder Oracle
Aktuelle Datums- und Zeitwerte abrufen
Bei der Analyse von Daten möchten wir diese oft mit dem aktuellen Zeitstempel vergleichen, wenn die Abfrage ausgeführt wird. In PostgreSQL kann dies mit der Funktion NOW() und den Schlüsselwörtern CURRENT_DATE, CURRENT_TIME und CURRENT_TIMESTAMP erreicht werden.
Wichtig: Die Funktion NOW() ist spezifisch für PostgreSQL, während die Funktionen CURRENT_* in Standard-SQL zur Verfügung gestellt werden und für die Verwendung über die Funktion NOW() empfohlen werden.
JETZT()
Verwenden Sie diese Funktion, um das aktuelle Datum und die aktuelle Uhrzeit zusammen mit der Zeitzone auszuwählen.
SELECT NOW();
| now |
|---|
| 2024-06-09 17:00:55.732 +0200 |
AKTUELLES_DATUM
Verwenden Sie dieses Schlüsselwort, um das aktuelle Datum auszuwählen.
SELECT CURRENT_DATE;
| current_date |
|---|
| 2024-06-09 |
AKTUELLE_ZEIT
Verwenden Sie dieses Schlüsselwort, um die aktuelle Zeit zusammen mit der Zeitzone (aber ohne das Datum) auszuwählen.
SELECT CURRENT_TIME;
| current_time |
|---|
| 17:03:50 +0200 |
CURRENT_TIMESTAMP
Verwenden Sie diese Funktion, um das aktuelle Datum und die aktuelle Uhrzeit zusammen mit der Zeitzone auszuwählen.
SELECT CURRENT_TIMESTAMP;
| current_timestamp |
|---|
| 2024-06-09 17:05:45.854 +0200 |
Schauen Sie sich diese Kochbücher an, um mehr zu erfahren:
- Wie man das aktuelle Datum in PostgreSQL abfragt
- Wie man die aktuelle Zeit in PostgreSQL abfragt
- Wie man das aktuelle Datum und die aktuelle Zeit (ohne Zeitzone) in PostgreSQL abfragt
- Wie man das aktuelle Datum und die aktuelle Zeit mit Zeitzonen-Offset in PostgreSQL abfragt
- Wie erhalte ich die aktuelle Zeit (ohne Zeitzone) in PostgreSQL?
Arithmetische Operationen auf Datums- und Zeitwerten
Arithmetische Operationen auf Datums- und Zeitwerten in PostgreSQL beinhalten die Berechnung der Differenz zwischen zwei Datumswerten und das Addieren oder Subtrahieren von INTERVALs zu oder von Datums-/Zeitwerten.
Folgen Sie den unten stehenden Beispielen, um:
Berechnen Sie die Differenz zwischen zwei Datumswerten mit der Funktion AGE().
SELECT AGE(sale_date, CURRENT_DATE) AS age_difference FROM sales WHERE product_name = 'Apples';
| age_difference |
|---|
| -8 days |
Beachten Sie, dass dies das INTERVALL zwischen zwei Werten zurückgibt.
Berechnen Sie die Differenz zwischen zwei Datumswerten mit dem Minus (-) Operator.
SELECT sale_timestamp - CURRENT_TIMESTAMP AS difference FROM sales WHERE product_name = 'Apples';
| difference |
|---|
| -8 days -09:56:38.387095 |
Beachten Sie, dass dies ein Intervall zwischen zwei Werten zurückgibt, wie es die Funktion age() tun würde.
Berechnen Sie die Differenz zwischen zwei Zeitwerten mit dem Minus (-)-Operator.
SELECT sale_time, sale_time - '09:00:00' AS difference FROM sales WHERE product_name = 'Apples';
| sale_time | difference |
|---|---|
| 08:00:00 | -01:00:00 |
INTERVALs addieren.
Verwenden Sie den Plus-Operator (+), um einen INTERVAL zu einem Datums-/Zeitwert hinzuzufügen:
SELECT sale_date + INTERVAL '1 day' AS next_day FROM sales WHERE product_name = 'Apples';
| next_day |
|---|
| 2024-06-02 00:00:00.000 |
INTERVALs subtrahieren.
Verwenden Sie den Minus-Operator (-), um ein INTERVAL von einem Datums-/Zeitwert zu subtrahieren.
SELECT sale_date - INTERVAL '1 week' AS previous_week FROM sales WHERE product_name = 'Apples';
| previous_week |
|---|
| 2024-05-25 00:00:00.000 |
In diesen Kochbüchern erfahren Sie mehr:
- Wie man die Datumsdifferenz in PostgreSQL/Oracle berechnet
- Wie man die Zeitstempel-Differenz in PostgreSQL berechnet
- Wie man das Intervall zwischen zwei Daten in PostgreSQL findet
- Wie man das Datum von gestern in PostgreSQL ermittelt
Manipulation von Datums- und Zeitwerten
PostgreSQL stellt Funktionen zur Verfügung, die es ermöglichen, bestimmte Teile von Datums-/Zeitwerten zu extrahieren, wie z.B. DATE_PART(), DATE_TRUNC() und EXTRACT(). In der Datenanalyse werden diese Funktionen häufig verwendet, um Daten nach Tag, Monat oder Jahr zu gruppieren und so die Erstellung von Berichten mit Statistiken über bestimmte Zeiträume zu ermöglichen.
DATE_PART()
Extrahiert eine bestimmte Komponente (z. B. Jahr, Monat oder Tag) aus einem Datums-/Zeitwert.
SELECT DATE_PART('year', sale_date) AS sale_year
FROM sales
WHERE product_name = 'Apples';
| sale_year |
|---|
| 2024 |
EXTRACT()
Extrahiert einen bestimmten Teil (z. B. Jahr, Monat oder Tag) aus einem Datums-/Zeitwert.
SELECT EXTRACT(YEAR FROM sale_date) AS sale_year FROM sales WHERE product_name = 'Apples';
| sale_year |
|---|
| 2024 |
Die Funktion EXTRACT() kann austauschbar mit der Funktion DATE_PART() verwendet werden. Allerdings kann EXTRACT() mit Zeitzonen umgehen.
DATE_TRUNC()
Kürzt einen Datums-/Zeitwert auf die angegebene Einheit (z. B. Jahr, Monat oder Tag) ab.
SELECT DATE_TRUNC('year', sale_date) AS year_start
FROM sales
WHERE product_name = 'Apples';
| year_start |
|---|
| 2024-01-01 00:00:00.000 +0100 |
MAKE_DATE()
Setzt ein vollständiges Datum aus Jahr, Monat und Tag zusammen.
SELECT MAKE_DATE('2024', '6', '1') AS date;
| date |
|---|
| 2024-06-01 |
GENERATE_SERIES()
Erzeugt eine Reihe von Datums-/Zeitwerten mit gleichen Abständen.
SELECT GENERATE_SERIES(
'2024-06-01 08:00:00'::timestamp,
'2024-06-01 09:00:00'::timestamp,
'20 minutes'::interval
) AS generated_timestamp;
| generated_timestamp |
|---|
| 2024-06-01 08:00:00.000 |
| 2024-06-01 08:20:00.000 |
| 2024-06-01 08:40:00.000 |
| 2024-06-01 09:00:00.000 |
Schauen Sie sich diese Kochbücher an, um mehr zu erfahren:
- Wie man in PostgreSQL nach Monat gruppiert
- Wie man in SQL nach Jahr gruppiert
- Wie man die Wochennummer aus einem Datum in PostgreSQL extrahiert
- Wie man Tagesnamen in PostgreSQL ausliest
- Wie man den Tag des Jahres aus einem Datum in PostgreSQL extrahiert
- Sortieren nach Monatsnamen in PostgreSQL oder Oracle
- Abrufen des vorherigen Monats in SQL
Formatieren von Datums- und Zeitwerten
PostgreSQL bietet mehrere Formatierungsfunktionen, die die Lesbarkeit Ihrer Berichte erleichtern. Dazu gehören TO_CHAR(), TO_DATE() und TO_TIMESTAMP().
TO_CHAR()
konvertiert einen Datums-/Zeitwert in eine formatierte Zeichenkette in einem bestimmten Format.
SELECT TO_CHAR(sale_date, 'MM/DD/YYYY') AS formatted_date FROM sales WHERE product_name = 'Apples';
SELECT TO_CHAR(sale_date, 'MM/DD/YYYY') AS formatted_date FROM sales WHERE product_name = 'Apples';
| formatted_date |
|---|
| 06/01/2024 |
Eine Übersicht über die verfügbaren Datums-/Zeitformate von PostgreSQL finden Sie hier.
TO_DATE()
Konvertiert eine Zeichenkette in einen Datumswert in einem bestimmten Format.
SELECT TO_DATE('2024-06-01', 'YYYY-MM-DD') AS date_value;
| date_value |
|---|
| 2024-06-01 |
TO_TIMESTAMP()
Konvertiert eine Zeichenkette in einen Zeitstempelwert in einem bestimmten Format.
SELECT TO_TIMESTAMP('2024-06-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS')
AS timestamp_value;
| timestamp_value |
|---|
| 2024-06-01 08:00:00.000 +0200 |
Schauen Sie sich diese Kochbücher an, um mehr zu erfahren:
- Wie man ein Datum in PostgreSQL formatiert
- Wie man in PostgreSQL einen String in ein Datum konvertiert
- Wie man eine Zeichenkette in einen Zeitstempel in PostgreSQL konvertiert
Arbeiten mit PostgreSQL Datums- und Zeitfunktionen
Die Datums- und Zeitfunktionen, die PostgreSQL bietet, sind wichtige Werkzeuge für die Datenanalyse und das Reporting. Sie können uns helfen, Datenmuster im Laufe der Zeit zu verstehen, wie z. B. Verkaufstrends oder Spitzenwerte beim Website-Traffic. Mit diesen Funktionen können Daten nach Tag, Monat oder Jahr gruppiert werden, wodurch es einfacher wird, Trends zu erkennen und fundierte Entscheidungen zu treffen. Außerdem helfen sie uns dabei, unsere Berichte zu formatieren, damit sie leichter zu lesen und zu verstehen sind.
Da Daten oft in verschiedenen Datenbanken oder Dateien gespeichert werden, können Sie Ihre Daten im CSV-Format zur weiteren Verarbeitung in PostgreSQL importieren.
Wenn Sie eine praktische Erinnerung an die SQL-Funktionen benötigen, sehen Sie sich unser kostenloses Standard-SQL-Funktionen Cheat Sheet an. Sie können es herunterladen, ausdrucken und beim Arbeiten und Lernen immer griffbereit haben.
Wenn Sie Ihre PostgreSQL-Kenntnisse vertiefen möchten, sollten Sie sich unseren umfassenden Kurs SQL von A bis Z in PostgreSQL ansehen. Er bietet Hunderte von Übungen, in denen Sie alles lernen, was Sie als PostgreSQL-Profi wissen müssen - einschließlich fortgeschrittener Konzepte wie Fensterfunktionen, rekursive Abfragen und PostGIS. Viel Spaß beim Lernen!
