Introducere
Când gestionați date în PostgreSQL, veți descoperi că valorile NULL pot fi dificil de gestionat. De exemplu, majoritatea expresiilor returnează o valoare NULL atunci când orice element al expresiei este NULL. Cum putem evita unele dintre dificultățile asociate cu valorile NULL? În primul articol din această serie de două părți, am explicat modul în care funcția PostgreSQL COALESCE poate fi utilizată pentru a testa dacă există valori NULL și pentru a înlocui valorile NULL cu o altă valoare. Acest articol va relua de unde am rămas și va continua discuția noastră despre funcția COALESCE și aplicațiile sale în PostgreSQL.
Precondiții
Înainte de a încerca să urmăriți exemplele din acest articol, asigurați-vă că PostgreSQL este deja instalat pe calculatorul dumneavoastră. De asemenea, ar trebui să aveți cunoștințe introductive despre PostgreSQL pentru a înțelege exemplele funcției COALESCE.
COALESCE în interfața de linie de comandă psql
În articolul anterior, am explicat cum să accesăm interfața de linie de comandă psql
pentru PostgreSQL. Va trebui să intrăm din nou în consola liniei de comandă psql
pentru a încerca câteva exemple COALESCE.
Să începem cu exemplul simplu prezentat mai jos:
1
|
SELECT COALESCE ( ‘măr’ , ‘pară’ , ‘căpșună’);
|
Salida acestei interogări va fi:
1
2 3 |
COALESCE
———- măr |
După cum puteți vedea, rezultatul returnat este ‘măr’, deoarece este prima valoare non-NULL din lista de argumente.
Dacă avem o valoare NULL ca prim element al listei, funcția COALESCE
o va ignora, căutând prima valoare care nu este NULL. Putem vedea cum funcționează acest lucru în următoarea interogare:
1
|
SELECT COALESCE ( NULL, ‘măr’ , ‘pară’ , ‘căpșună’);
|
Lovitura va fi:
1
2 3 4 |
COALESCE
———- apple (1 ROW) |
Utilizați PostgreSQL COALESCE timestamp null
În următorul nostru exemplu, vom încerca să folosim funcția COALESCE
cu tipul de date timestamp.
În primul rând, va trebui să creăm un alt tabel în 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 ); |
De asemenea, va trebui să inserăm înregistrări în tabelul books
pe care tocmai l-am creat:
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’); |
Observați că am inserat o valoare NULL în tabelul nostru în coloana year_released
, care are un tip de date timestamp
.
Să ne imaginăm că am dori să obținem prețul total al fiecărei cărți. Pentru a obține această informație, vom înmulți valorile a două coloane: quantity
și price
. Interogarea de mai jos arată cum se face acest lucru:
1
2 |
SELECT book_id, book_name, ( quantity * price ) AS total_price
FROM books; |
Lovitura interogării va arăta astfel:
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) |
Să ne uităm la conținutul tabelului books
cu această interogare:
1
|
SELECT * FROM books;
|
Legătura de ieșire ar arăta astfel:
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 rânduri) |
- Observați că există o valoare NULL în ultima coloană a celui de-al patrulea rând. Putem schimba acest lucru pentru a utiliza în schimb o valoare non-NULL folosind funcția
COALESCE
:
1
2 |
SELECT book_id, book_name,
COALESCE(year_released, CURRENT_TIMESTAMP) FROM books; |
Iată cum va arăta rezultatul:
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) |
Concluzie
În această serie de articole în două părți, am analizat în profunzime funcția COALESCE din PostgreSQL. Am prezentat mai multe exemple despre modul în care această funcție poate fi utilizată pentru a testa dacă există valori NULL în datele dumneavoastră și pentru a înlocui o valoare non-NULL dacă este necesar. Folosind aceste exemple ca ghid, veți fi pregătiți să încorporați funcția COALESCE
în propriile dvs. declarații PostgreSQL.
.