Indledning
Når du administrerer data i PostgreSQL, vil du opdage, at NULL-værdier kan være en smule vanskelige at håndtere. For eksempel returnerer de fleste udtryk en værdi på NULL, når et element i udtrykket er NULL. Hvordan kan vi undgå nogle af de vanskeligheder, der er forbundet med NULL-værdier? I den første artikel i denne todelte serie forklarede vi, hvordan PostgreSQL COALESCE-funktionen kan bruges til at teste for NULL-værdier og erstatte en anden værdi i stedet for NULL-værdierne. Denne artikel vil samle op hvor vi slap og fortsætte vores diskussion af COALESCE-funktionen og dens anvendelser i PostgreSQL.
Forudsætninger
Hvor du forsøger at følge med i eksemplerne i denne artikel, skal du være sikker på, at PostgreSQL allerede er installeret på din maskine. Du bør også have et vist indledende kendskab til PostgreSQL for at kunne forstå eksemplerne på COALESCE-funktionen.
COALESCE i psql-kommandolinjeinterfacet
I den foregående artikel forklarede vi, hvordan du får adgang til psql
kommandolinjeinterfacet for PostgreSQL. Vi skal endnu en gang gå ind i psql
-kommandolinjekonsollen for at afprøve nogle COALESCE-eksempler.
Lad os starte med det enkle eksempel vist nedenfor:
1
|
SELECT COALESCE ( ‘apple’ , ‘pear’ , ‘strawberry’);
|
Opdatet af denne forespørgsel vil være:
Det vil være:
1
2 3 |
COALESCE
———- apple |
Som du kan se, er det returnerede output “apple”, da det er den første ikke-NULL-værdi i argumentlisten.
Hvis vi har en NULL-værdi som det første element i listen, vil COALESCE
-funktionen springe den over og lede efter den første værdi, der ikke er NULL. Vi kan se, hvordan dette fungerer i følgende forespørgsel:
1
|
SELECT COALESCE ( NULL, ‘apple’ , ‘pear’ , ‘strawberry’);
|
Opdatet vil være:
1
2 3 4 |
COALESCE
———- apple (1 ROW) |
Brug PostgreSQL COALESCE timestamp null
I vores næste eksempel, vil vi prøve at bruge COALESCE
-funktionen med datatypen timestamp.
Først skal vi oprette en anden tabel i PostgreSQL:
1
2 3 4 5 6 6 7 |
CREATE TABLE books(
book_id INT PRIMARY KEY NOT NULL, book_name VARCHAR NOT NULL, quantity INT, price REAL, year_released TIMESTAMP ); |
Vi skal også indsætte poster i den books
tabel, vi lige har oprettet:
1
2 3 4 5 6 6 7 |
INSERT INTO books(book_name, quantity, price, year_released)
VALUES (‘Book1’, 12, 60, ‘2015-07-21 09:10:25+8’), (‘Book2’, 5, 55, ‘2018-02-12 15:40:15+8’), (‘Book3’, 10, 90, ‘2017-11-12-11 00:10:11:11+8’), (‘Book4’, 26, 47, NULL), (‘Book5’, 2, 83, ‘2019-03-05 03:05:08+8’); |
Bemærk, at vi indsatte en NULL-værdi i vores tabel i kolonnen year_released
, som har datatypen timestamp
.
Lad os forestille os, at vi gerne vil have den samlede pris for hver bog. For at få disse oplysninger skal vi gange værdierne i to kolonner: quantity
og price
. Nedenstående forespørgsel viser, hvordan dette gøres:
1
2 |
SELECT book_id, book_name, ( quantity * price ) AS total_price
FROM books; |
Opdatet af forespørgslen vil se sådan ud:
1
2 3 4 5 6 6 7 8 |
book_id | book_name | total_price
———+———–+————- 1 | Book1 | 720 2 | Book2 | 275 3 | Book3 | 900 4 | Book4 | 1222 5 | Book5 | 166 (5 RÆKKER) |
Lad os se på indholdet af books
-tabellen med denne forespørgsel:
1
|
SELECT * FROM books;
|
Opdatet ville se sådan her ud:
1
2 3 4 5 6 6 7 8 |
book_id | book_name | quantity | price | year_released
———+———–+———-+——-+——-+——————— 1 | Book1 | 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 rækker) |
- Bemærk, at der er en NULL-værdi i den sidste kolonne i den fjerde række. Vi kan ændre dette til at bruge en ikke-NULL-værdi i stedet ved hjælp af funktionen
COALESCE
:
1
2 |
SELECT book_id, book_name,
COALESCE(year_released, CURRENT_TIMESTAMP) FROM books; |
Her er, hvordan outputtet vil se ud:
1
2 3 4 5 6 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 | Book3 | 2017-11-12 00:10:11-05 4 | Book4 | Book4 | 2020-02-13 06:20:41.239926-05 5 | Book5 | 2019-03-05 03:05:08-05 (5 RÆKKER) |
Konklusion
I denne artikelserie i to dele har vi taget et dybdegående kig på PostgreSQL COALESCE-funktionen. Vi har vist flere eksempler på, hvordan denne funktion kan bruges til at teste for NULL-værdier i dine data og erstatte en ikke-NULL-værdi, hvis det er nødvendigt. Ved at bruge disse eksempler som en vejledning vil du være forberedt på at inkorporere COALESCE
funktionen i dine egne PostgreSQL statements.