Úvod

Při správě dat v PostgreSQL zjistíte, že práce s hodnotami NULL může být poněkud obtížná. Například většina výrazů vrací hodnotu NULL, pokud je některý prvek výrazu NULL. Jak se můžeme vyhnout některým potížím spojeným s hodnotami NULL? V prvním článku tohoto dvoudílného seriálu jsme si vysvětlili, jak lze funkci PostgreSQL COALESCE použít k testování hodnot NULL a nahrazení hodnot NULL jinou hodnotou. V tomto článku navážeme tam, kde jsme skončili, a budeme pokračovat v diskusi o funkci COALESCE a jejím použití v PostgreSQL.

Předpoklady

Předtím, než se pokusíte postupovat podle příkladů v tomto článku, ujistěte se, že je PostgreSQL na vašem počítači již nainstalována. Měli byste mít také určité úvodní znalosti o PostgreSQL, abyste pochopili příklady funkce COALESCE.

COALESCE v rozhraní příkazového řádku psql

V předchozím článku jsme si vysvětlili, jak přistupovat k rozhraní příkazového řádku psql pro PostgreSQL. Budeme muset opět vstoupit do konzoly příkazového řádku psql, abychom si vyzkoušeli některé příklady COALESCE.

Začneme jednoduchým příkladem uvedeným níže:

1
SELECT COALESCE (‚apple‘ , ‚pear‘ , ‚strawberry‘);

Výstup tohoto dotazu bude následující:

1
2
3
COALESCE
———-
jablko

Jak vidíte, vráceným výstupem je ‚jablko‘, protože je to první nenulová hodnota v seznamu argumentů.

Pokud máme jako první položku seznamu hodnotu NULL, funkce COALESCE ji přeskočí a hledá první hodnotu, která není NULL. Jak to funguje, můžeme vidět na následujícím dotazu:

1
SELECT COALESCE ( NULL, ‚apple‘ , ‚pear‘ , ‚strawberry‘);

Výstup bude následující:

1
2
3
4
COALESCE
———-
apple
(1 ROW)

Použije PostgreSQL COALESCE timestamp null

V našem dalším příkladu, zkusíme použít funkci COALESCE s datovým typem timestamp.

Nejprve budeme muset v PostgreSQL vytvořit další tabulku:

1
2
3
4
5
6
7
CREATE TABLE books(
book_id INT PRIMARY KEY NOT NULL,
název_knihy VARCHAR NOT NULL,
množství INT,
cena REAL,
rok_vydání TIMESTAMP
);

Musíme také vložit záznamy do tabulky books, kterou jsme právě vytvořili:

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:Všimněte si, že jsme do naší tabulky vložili hodnotu NULL do sloupce year_released, který má datový typ timestamp.

Představme si, že bychom chtěli získat celkovou cenu jednotlivých knih. Abychom tuto informaci získali, vynásobíme hodnoty dvou sloupců: quantity a price. Následující dotaz ukazuje, jak to provést:

1
2
SELECT book_id, book_name, ( quantity * price ) AS total_price
FROM books;

Výstup dotazu bude vypadat takto:

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 ŘÁDKŮ)

Podívejme se na obsah tabulky books pomocí tohoto dotazu:

1
SELECT * FROM books;

Výstup by vypadal takto:

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 řádků)
  • Všimněte si, že v posledním sloupci čtvrtého řádku je hodnota NULL. Můžeme ji změnit tak, aby místo ní byla použita nenulová hodnota pomocí funkce COALESCE:
1
2
SELECT book_id, book_name,
COALESCE(year_released, CURRENT_TIMESTAMP) FROM books;

Takto bude vypadat výstup:

1
2
3
4
5
6
7
8
book_id | book_name | COALESCE
———+———–+——————————-
1 | Book1 | 2015-07-21 09. září 2015: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 ŘÁDKŮ)

Závěr

V této dvoudílné sérii článků jsme se podrobně zabývali funkcí PostgreSQL COALESCE. Ukázali jsme si několik příkladů, jak lze tuto funkci použít k testování hodnot NULL v datech a v případě potřeby ji nahradit hodnotou jinou než NULL. Na základě těchto příkladů budete připraveni začlenit funkci COALESCE do vlastních příkazů PostgreSQL.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.