Wprowadzenie
Podczas zarządzania danymi w PostgreSQL możesz zauważyć, że wartości NULL mogą być nieco kłopotliwe w obsłudze. Na przykład, większość wyrażeń zwraca wartość NULL, gdy dowolny element wyrażenia jest NULL. Jak możemy uniknąć niektórych trudności związanych z wartościami NULL? W pierwszym artykule tej dwuczęściowej serii wyjaśniliśmy, w jaki sposób funkcja PostgreSQL COALESCE może być użyta do testowania wartości NULL i zastępowania innych wartości w miejsce NULL. W tym artykule kontynuujemy nasze rozważania na temat funkcji COALESCE i jej zastosowań w PostgreSQL.
Wymagania wstępne
Przed przystąpieniem do rozwiązywania przykładów zawartych w tym artykule należy upewnić się, że PostgreSQL jest już zainstalowany na komputerze. Powinieneś także posiadać pewną wiedzę wstępną na temat PostgreSQL, aby zrozumieć przykłady funkcji COALESCE.
COALESCE w interfejsie wiersza poleceń psql
W poprzednim artykule wyjaśniliśmy, jak uzyskać dostęp do psql
interfejsu wiersza poleceń dla PostgreSQL. Będziemy musieli ponownie wejść do konsoli wiersza poleceń psql
, aby wypróbować kilka przykładów COALESCE.
Zacznijmy od prostego przykładu pokazanego poniżej:
1
|
SELECT COALESCE ( 'jabłko’ , 'gruszka’ , 'truskawka’);
|
Wynikiem tego zapytania będzie:
1
2 3 |
COALESCE
———- apple |
Jak widać, zwróconą wartością wyjściową jest 'apple’, ponieważ jest to pierwsza wartość non-NULL na liście argumentów.
Jeśli mamy wartość NULL jako pierwszy element listy, funkcja COALESCE
pominie ją, szukając pierwszej wartości, która nie jest NULL. Możemy zobaczyć, jak to działa w następującym zapytaniu:
1
|
SELECT COALESCE ( NULL, 'apple’ , 'pear’ , 'strawberry’);
|
Wynikiem będzie:
1
2 3 4 |
COALESCE
———- apple (1 ROW) |
Use PostgreSQL COALESCE timestamp null
W naszym kolejnym przykładzie, postaramy się użyć funkcji COALESCE
z typem danych timestamp.
Na początku będziemy musieli utworzyć kolejną tabelę w 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 ); |
Będziemy musieli również wstawić rekordy do books
tabeli, którą właśnie utworzyliśmy:
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′); |
Zauważ, że wstawiliśmy do naszej tabeli wartość NULL w kolumnie year_released
, która ma typ danych timestamp
.
Wyobraźmy sobie, że chcielibyśmy uzyskać całkowitą cenę każdej książki. Aby uzyskać tę informację, pomnożymy wartości dwóch kolumn: quantity
i price
. Poniższe zapytanie pokazuje, jak to zrobić:
1
2 |
SELECT book_id, book_name, ( ilość * cena ) AS total_price
FROM books; |
Wyjście zapytania będzie wyglądało następująco:
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) |
Przyjrzyjrzyjmy się zawartości tabeli books
za pomocą tego zapytania:
1
|
SELECT * FROM books;
|
Wyjście wyglądałoby tak:
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 wierszy) |
- Zauważ, że w ostatniej kolumnie czwartego wiersza znajduje się wartość NULL. Możemy to zmienić, aby zamiast tego użyć wartości innej niż NULL, używając funkcji
COALESCE
:
1
2 |
SELECT book_id, book_name,
COALESCE(year_released, CURRENT_TIMESTAMP) FROM books; |
Oto jak będzie wyglądało wyjście:
1
2 3 4 5 6 7 8 |
book_id | book_name | COALESCE
———+———–+——————————- 1 | Book1 | 2015-07-21 09:10:25: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) |
Podsumowanie
W tej dwuczęściowej serii artykułów przyjrzeliśmy się dogłębnie funkcji PostgreSQL COALESCE. Pokazaliśmy kilka przykładów użycia tej funkcji do testowania wartości NULL w danych i w razie potrzeby zastąpienia jej wartością inną niż NULL. Używając tych przykładów jako przewodnika, będziesz przygotowany do włączenia funkcji COALESCE
do swoich własnych deklaracji PostgreSQL.