Introduktion
När du hanterar data i PostgreSQL kommer du att upptäcka att NULL-värden kan vara lite knepiga att hantera. De flesta uttryck returnerar till exempel värdet NULL när något element i uttrycket är NULL. Hur kan vi undvika några av de svårigheter som är förknippade med NULL-värden? I den första artikeln i den här tvådelade serien förklarade vi hur PostgreSQL COALESCE-funktionen kan användas för att testa NULL-värden och ersätta ett annat värde i stället för NULLs. Den här artikeln tar vid där vi slutade och fortsätter vår diskussion om COALESCE-funktionen och dess tillämpningar i PostgreSQL.
Förutsättningar
För att försöka följa med i exemplen i den här artikeln måste du vara säker på att PostgreSQL redan är installerat på din maskin. Du bör också ha vissa inledande kunskaper om PostgreSQL för att förstå exemplen på funktionen COALESCE.
COALESCE i kommandoradsgränssnittet psql
I föregående artikel förklarade vi hur man får tillgång till kommandoradsgränssnittet psql
för PostgreSQL. Vi kommer att behöva gå in i kommandoradskonsolen psql
igen för att prova några COALESCE-exempel.
Låt oss börja med det enkla exemplet som visas nedan:
1
|
SELECT COALESCE (”apple” , ”pear” , ”strawberry”);
|
Utmatningen av denna fråga kommer att vara:
1
2 3 |
COALESCE
———- apple |
Som du kan se är den återgivna utgången ”äpple”, eftersom det är det första värdet som inte är NOLL i argumentlistan.
Om vi har ett NULL-värde som första objekt i listan hoppar COALESCE
-funktionen över det och letar efter det första värdet som inte är NULL. Vi kan se hur detta fungerar i följande fråga:
1
|
SELECT COALESCE ( NULL, ’apple’ , ’pear’ , ’strawberry’);
|
Utgången blir:
1
2 3 4 |
COALESCE
———- apple (1 ROW) |
Använd PostgreSQL COALESCE timestamp null
I vårt nästa exempel, ska vi försöka använda COALESCE
-funktionen med datatypen timestamp.
Först måste vi skapa en annan tabell i PostgreSQL:
1
2 3 4 5 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 måste också lägga in poster i tabellen books
som vi just skapade:
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’), (’Book2’, 5, 55, ’2018-02-12 15:40:15+8’), (’Book3’, 10, 90, ’2017-11-12 00:10:11+8’), (’Book4’, 26, 47, NULL), (’Book5’, 2, 83, ’2019-03-05 03:05:08+8’); |
Märk väl att vi har lagt in ett NULL-värde i vår tabell i kolumnen year_released
, som har datatypen timestamp
.
Föreställ dig att vi vill få fram det totala priset för varje bok. För att få fram den informationen multiplicerar vi värdena i två kolumner: quantity
och price
. Frågan nedan visar hur detta görs:
1
2 |
SELECT book_id, book_name, ( quantity * price ) AS total_price
FROM books; |
Utmatningen av frågan kommer att se ut som följer:
1
2 3 4 5 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 ROWS) |
Låt oss titta på innehållet i tabellen books
med denna fråga:
1
|
SELECT * FROM books;
|
Utgången skulle se ut så här:
1
2 3 4 5 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 rader) |
- Bemärk att det finns ett NULL-värde i den sista kolumnen i den fjärde raden. Vi kan ändra detta till att använda ett icke-NULL-värde i stället med hjälp av funktionen
COALESCE
:
1
2 |
SELECT book_id, book_name,
COALESCE(year_released, CURRENT_TIMESTAMP) FROM books; |
Så här ser resultatet ut:
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) |
Slutsats
I den här tvådelade artikelserien har vi tittat närmare på PostgreSQL COALESCE-funktionen. Vi har visat flera exempel på hur den här funktionen kan användas för att testa för NULL-värden i dina data och ersätta ett icke-NULL-värde om det behövs. Genom att använda dessa exempel som vägledning kommer du att vara förberedd på att införliva COALESCE
-funktionen i dina egna PostgreSQL-utsagor.