Bevezetés
Az adatok PostgreSQL-ben történő kezelése során a NULL értékek kezelése kissé trükkös lehet. Például a legtöbb kifejezés NULL értéket ad vissza, ha a kifejezés bármely eleme NULL. Hogyan kerülhetjük el a NULL értékekkel kapcsolatos nehézségek egy részét? A kétrészes sorozat első cikkében bemutattuk, hogy a PostgreSQL COALESCE függvénye hogyan használható a NULL értékek vizsgálatára és a NULL-ok helyére egy másik érték behelyettesítésére. Ez a cikk ott folytatódik, ahol abbahagytuk, és a COALESCE függvényről és annak PostgreSQL-ben való alkalmazásáról folytatjuk a beszélgetést.
Előfeltételek
Mielőtt megpróbálná követni a cikk példáit, győződjön meg róla, hogy a PostgreSQL már telepítve van a gépén. Emellett rendelkeznie kell némi bevezető ismerettel a PostgreSQL-ről ahhoz, hogy megértse a COALESCE függvény példáit.
COALESCE a psql parancssori felületén
Az előző cikkben elmagyaráztuk, hogyan lehet elérni a PostgreSQL psql
parancssori felületét. Ismét be kell lépnünk a psql
parancssori konzolba, hogy kipróbálhassunk néhány COALESCE példát.
Kezdjük az alábbi egyszerű példával:
1
|
SELECT COALESCE ( ‘alma’ , ‘körte’ , ‘eper’);
|
A lekérdezés kimenete a következő lesz:
1
2 3 |
COALESCE
———- apple |
Amint látható, a visszaadott kimenet ‘alma’, mivel ez az első nem NULL érték az argumentumlistában.
Ha a lista első elemeként NULL értéket kapunk, akkor a COALESCE
függvény kihagyja azt, és az első nem NULL értéket keresi. Ennek működését a következő lekérdezésben láthatjuk:
1
|
SELECT COALESCE ( NULL, ‘alma’ , ‘körte’ , ‘eper’);
|
A kimenet a következő lesz:
1
2 3 4 |
COALESCE
———-. apple (1 ROW) |
Use PostgreSQL COALESCE timestamp null
A következő példánkban, a COALESCE
függvényt próbáljuk meg használni az időbélyeg adattípussal.
Először is létre kell hoznunk egy másik táblát a PostgreSQL-ben:
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 ); |
Az imént létrehozott books
táblába is be kell illesztenünk rekordokat:
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’); |
Figyeljük meg, hogy a year_released
oszlopba, amelynek adattípusa timestamp
, NULL értéket illesztettünk be a táblázatunkba.
Tegyük fel, hogy szeretnénk megkapni az egyes könyvek teljes árát. Ahhoz, hogy ezt az információt megkapjuk, megszorozzuk két oszlop értékét: quantity
és price
. Az alábbi lekérdezés mutatja, hogy ez hogyan történik:
1
2 |
SELECT book_id, book_name, ( quantity * price ) AS total_price
FROM books; |
A lekérdezés kimenete így fog kinézni:
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) |
Nézzük meg a books
tábla tartalmát ezzel a lekérdezéssel:
1
|
SELECT * FROM books;
|
A kimenet így nézne ki:
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 sor) |
- Figyeljünk arra, hogy a negyedik sor utolsó oszlopában NULL érték van. Ezt a
COALESCE
függvény segítségével megváltoztathatjuk, hogy helyette egy nem NULL értéket használjunk:
1
2 |
SELECT book_id, book_name,
COALESCE(year_released, CURRENT_TIMESTAMP) FROM books; |
Íme a kimenet:
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) |
Következtetés
Ebben a kétrészes cikksorozatban alaposan megnéztük a PostgreSQL COALESCE függvényét. Számos példát mutattunk arra, hogyan használható ez a függvény az adatokban található NULL értékek vizsgálatára, és szükség esetén nem NULL értékkel való helyettesítésére. A példák segítségével felkészülhet arra, hogy a COALESCE
függvényt beépítse a saját PostgreSQL utasításaiba.