Ú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ů:
Výstup dotazu bude vypadat takto:
Podívejme se na obsah tabulky
Výstup by vypadal takto:
Takto bude vypadat výstup:
ZávěrV 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 |