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 psqlinterfejsu 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 bookstabeli, 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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.