Introduction
Wenn Sie Daten in PostgreSQL verwalten, werden Sie feststellen, dass NULL-Werte etwas schwierig zu handhaben sein können. Zum Beispiel geben die meisten Ausdrücke den Wert NULL zurück, wenn irgendein Element des Ausdrucks NULL ist. Wie kann man einige der mit NULL-Werten verbundenen Schwierigkeiten vermeiden? Im ersten Artikel dieser zweiteiligen Serie haben wir erklärt, wie die PostgreSQL-Funktion COALESCE verwendet werden kann, um auf NULL-Werte zu testen und einen anderen Wert anstelle der NULLs zu ersetzen. Dieser Artikel knüpft da an, wo wir aufgehört haben und setzt die Diskussion über die Funktion COALESCE und ihre Anwendungen in PostgreSQL fort.
Voraussetzungen
Bevor Sie versuchen, den Beispielen in diesem Artikel zu folgen, sollten Sie sicherstellen, dass PostgreSQL bereits auf Ihrem Rechner installiert ist. Außerdem sollten Sie über einige einführende Kenntnisse von PostgreSQL verfügen, um die Beispiele der COALESCE-Funktion zu verstehen.
COALESCE in der psql-Befehlszeilenschnittstelle
Im vorherigen Artikel haben wir erklärt, wie man auf die psql
Befehlszeilenschnittstelle für PostgreSQL zugreift. Wir müssen die psql
Kommandozeilenkonsole erneut aufrufen, um einige COALESCE-Beispiele auszuprobieren.
Beginnen wir mit dem unten gezeigten einfachen Beispiel:
1
|
SELECT COALESCE ( ‚Apfel‘ , ‚Birne‘ , ‚Erdbeere‘);
|
Die Ausgabe dieser Abfrage wird sein:
1
2 3 |
COALESCE
———- Apfel |
Wie Sie sehen, ist die zurückgegebene Ausgabe ‚Apfel‘, da es der erste Nicht-NULL-Wert in der Argumentliste ist.
Wenn wir einen NULL-Wert als erstes Element in der Liste haben, überspringt die Funktion COALESCE
diesen und sucht nach dem ersten Wert, der nicht NULL ist. Wir können sehen, wie dies in der folgenden Abfrage funktioniert:
1
|
SELECT COALESCE ( NULL, ‚Apfel‘ , ‚Birne‘ , ‚Erdbeere‘);
|
Die Ausgabe wird sein:
1
2 3 4 |
KOALESZIEREN
———- Apple (1 ROW) |
Use PostgreSQL COALESCE timestamp null
In unserem nächsten Beispiel, werden wir versuchen, die Funktion COALESCE
mit dem Datentyp timestamp zu verwenden.
Zunächst müssen wir eine weitere Tabelle in PostgreSQL erstellen:
1
2 3 4 5 6 7 |
CREATE TABLE books(
book_id INT PRIMARY KEY NOT NULL, Buch_name VARCHAR NOT NULL, Menge INT, Preis REAL, Jahr_Veröffentlichung TIMESTAMP ); |
Wir müssen auch Datensätze in die books
Tabelle einfügen, die wir gerade erstellt haben:
1
2 3 4 5 6 7 |
INSERT INTO books(book_name, quantity, price, year_released)
VALUES (‚Book1‘, 12, 60, ‚2015-07-21 09:10:25+8‘), (‚Buch2‘, 5, 55, ‚2018-02-12 15:40:15+8‘), (‚Buch3‘, 10, 90, ‚2017-11-12 00:10:11+8‘), (‚Buch4‘, 26, 47, NULL), (‚Buch5‘, 2, 83, ‚2019-03-05 03:05:08+8‘); |
Beachten Sie, dass wir einen NULL-Wert in unsere Tabelle in der Spalte year_released
eingefügt haben, die einen Datentyp von timestamp
hat.
Stellen wir uns vor, wir möchten den Gesamtpreis für jedes Buch ermitteln. Um diese Information zu erhalten, multiplizieren wir die Werte von zwei Spalten: quantity
und price
. Die folgende Abfrage zeigt, wie das geht:
1
2 |
SELECT book_id, book_name, ( quantity * price ) AS total_price
FROM books; |
Die Ausgabe der Abfrage wird wie folgt aussehen:
1
2 3 4 5 6 7 8 |
Buch_id | book_name | total_price
———+———–+————- 1 | Buch1 | 720 2 | Buch2 | 275 3 | Buch3 | 900 4 | Buch4 | 1222 5 | Buch5 | 166 (5 ZEILEN) |
Sehen wir uns den Inhalt der Tabelle books
mit dieser Abfrage an:
1
|
SELECT * FROM books;
|
Die Ausgabe würde wie folgt aussehen:
1
2 3 4 5 6 7 8 |
Buch_id | book_name | quantity | price | year_released
———+———–+———-+——-+——————— 1 | Buch1 | 12 | 60 | 2015-07-21 09:10:25 2 | Book2 | 5 | 55 | 2018-02-12 15:40:15 3 | Book3 | 10 | 90 | 2017-11-12 00:10:11 4 | Book4 | 26 | 47 | 5 | Book5 | 2 | 83 | 2019-03-05 03:05:08 (5 Zeilen) |
- Beachten Sie, dass es einen NULL-Wert in der letzten Spalte der vierten Zeile gibt. Wir können dies ändern, um stattdessen einen Nicht-NULL-Wert zu verwenden, indem wir die Funktion
COALESCE
verwenden:
1
2 |
SELECT book_id, book_name,
COALESCE(year_released, CURRENT_TIMESTAMP) FROM books; |
So wird die Ausgabe aussehen:
1
2 3 4 5 6 7 8 |
book_id | book_name | COALESCE
———+———–+——————————- 1 | Book1 | 2015-07-21 09:10:25-04 2 | Book2 | 2018-02-12 15:40:15-05 3 | Book3 | 2017-11-12 00:10:11-05 4 | Book4 | 2020-02-13 06:20:41.239926-05 5 | Book5 | 2019-03-05 03:05:08-05 (5 ROWS) |
Abschluss
In dieser zweiteiligen Artikelserie haben wir einen ausführlichen Blick auf die PostgreSQL-Funktion COALESCE geworfen. Wir haben mehrere Beispiele gezeigt, wie diese Funktion verwendet werden kann, um auf NULL-Werte in Ihren Daten zu testen und bei Bedarf einen Nicht-NULL-Wert zu ersetzen. Anhand dieser Beispiele können Sie die Funktion COALESCE
in Ihre eigenen PostgreSQL-Anweisungen einbauen.