Introduzione
Quando si gestiscono dati in PostgreSQL, si scopre che i valori NULL possono essere un po’ difficili da gestire. Per esempio, la maggior parte delle espressioni restituisce un valore NULL quando qualsiasi elemento dell’espressione è NULL. Come possiamo evitare alcune delle difficoltà associate ai valori NULL? Nel primo articolo di questa serie in due parti, abbiamo spiegato come la funzione COALESCE di PostgreSQL può essere usata per testare i valori NULL e sostituire un altro valore al posto dei NULL. Questo articolo riprenderà da dove abbiamo lasciato e continuerà la nostra discussione sulla funzione COALESCE e le sue applicazioni in PostgreSQL.
Prequisiti
Prima di provare a seguire gli esempi in questo articolo, assicuratevi che PostgreSQL sia già installato sulla vostra macchina. Dovresti anche avere qualche conoscenza introduttiva di PostgreSQL per capire gli esempi della funzione COALESCE.
COALESCE nell’interfaccia a riga di comando psql
Nell’articolo precedente, abbiamo spiegato come accedere all’interfaccia a riga di comando psql
per PostgreSQL. Avremo bisogno di entrare ancora una volta nella console a riga di comando psql
per provare alcuni esempi di COALESCE.
Iniziamo con il semplice esempio mostrato qui sotto:
1
|
SELECT COALESCE ( ‘apple’ , ‘pear’ , ‘strawberry’);
|
L’output di questa query sarà:
1
2 3 |
COALESCE
———- apple |
Come potete vedere, l’output restituito è ‘apple’ poiché è il primo valore non-NULL nella lista degli argomenti.
Se abbiamo un valore NULL come primo elemento della lista, la funzione COALESCE
lo salta, cercando il primo valore che non sia NULL. Possiamo vedere come funziona nella seguente query:
1
|
SELECT COALESCE ( NULL, ‘apple’ , ‘pear’ , ‘strawberry’);
|
L’output sarà:
1
2 3 4 |
COALESARE
———- apple (1 ROW) |
Usa PostgreSQL COALESCE timestamp null
Nel nostro prossimo esempio, proveremo ad usare la funzione COALESCE
con il tipo di dati timestamp.
Prima, dovremo creare un’altra tabella in PostgreSQL:
1
2 3 4 5 6 7 |
CREATE TABLE books(
book_id INT PRIMARY KEY NOT NULL, nome_libro VARCHAR NOT NULL, quantità INT, prezzo REAL, anno_uscita TIMESTAMP ); |
Abbiamo anche bisogno di inserire record nella tabella books
che abbiamo appena creato:
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’), (‘Libro2’, 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’); |
Nota che abbiamo inserito un valore NULL nella nostra tabella nella colonna year_released
, che ha un tipo di dati timestamp
.
Immaginiamo di voler ottenere il prezzo totale di ogni libro. Per ottenere questa informazione, moltiplichiamo i valori di due colonne: quantity
e price
. La query qui sotto mostra come questo viene fatto:
1
2 |
SELECT book_id, book_name, ( quantity * price ) AS total_price
FROM books; |
L’output della query sarà come:
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) |
Guardiamo il contenuto della tabella books
con questa query:
1
|
SELECT * FROM books;
|
L’output sarebbe come questo:
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 righe) |
- Nota che c’è un valore NULL nell’ultima colonna della quarta riga. Possiamo cambiarlo per usare invece un valore non NULL usando la funzione
COALESCE
:
1
2 |
SELECT book_id, book_name,
COALESCE(year_released, CURRENT_TIMESTAMP) FROM books; |
Ecco come sarà l’output:
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) |
Conclusione
In questa serie di articoli in due parti, abbiamo dato uno sguardo approfondito alla funzione PostgreSQL COALESCE. Abbiamo mostrato diversi esempi di come questa funzione può essere usata per testare i valori NULL nei vostri dati e sostituire un valore non-NULL se necessario. Usando questi esempi come guida, sarete pronti a incorporare la funzione COALESCE
nelle vostre dichiarazioni PostgreSQL.