PostgreSQL | Как подменять NULL-значение при выборке данных через SELECT?

PostgreSQL | Как подменять NULL-значение при выборке данных через SELECT?

NULL-значения, которые база данных отдаёт на клиент могут не представлять никакой ценности для конечного пользователя. В большинстве случаев от них нужно избавляться.

Если выбирать данные из таблиц с включением NULL-значений, тогда в остальной части приложения нужно будет делать эти проверки «на NULL» и производить подмены на что-то более внятное и информативное. Либо бэкенд меняет данные, либо уже на клиенте происходит замена.

В PostgreSQL есть готовое решение подобной проблемы — это функция COALESCE(). Она принимает любое количество параметров. Первый «не NULL» параметр в направлении слева-направо будет возвращён данной функцией. Если все параметры будут NULL, тогда вернётся NULL. Как этим пользоваться? Посмотрим на таблицу:

CREATE TABLE IF NOT EXISTS test.t_2023_07_13 (
  id serial,
  name text,
  age int,
  color text,
  CONSTRAINT t_2023_07_13_pkey PRIMARY KEY (id)
);
-- DROP TABLE IF EXISTS test.t_2023_07_13;

INSERT INTO test.t_2023_07_13 (name, age, color) VALUES (null, 20, 'красный');
INSERT INTO test.t_2023_07_13 (name, age, color) VALUES ('Иван', null, 'синий');
INSERT INTO test.t_2023_07_13 (name, age, color) VALUES ('Мария', 30, 'зелёный');
INSERT INTO test.t_2023_07_13 (name, age, color) VALUES ('Дмитрий', 45, null);

SELECT * FROM test.t_2023_07_13;

Визуально данные в таблице выглядят так:

Таблица с неполными данными в PostgreSQL - есть null значения
Таблица с неполными данными в PostgreSQL — есть null значения

 

Мы видим 3 записи с NULL-значениями. Вот от них нам и нужно избавиться.

Теперь сформируем SELECT запрос с использованием функции COALESCE(). ВАЖНО! Для корректной выборки данных, типы данных в столбцах и на выходе из COALESCE() должны совпадать, иначе будет ошибка.

SELECT id, COALESCE(name, '--без имени--'), COALESCE(age, 0), COALESCE(color, '--без цвета--') FROM test.t_2023_07_13;

Результат такой выборки:

Использование функции COALESCE в PostgreSQL при выборке данных для замены NULL-значений
Использование функции COALESCE в PostgreSQL при выборке данных для замены NULL-значений

Теперь наша таблица заполнена данными и нигде не встречаются NULL-значения. Такую таблицу можно отправлять на клиент.

 

Информационные ссылки

Официальный сайт WEB-оболочки pgAdminhttps://www.pgadmin.org

Официальный сайт СУБД PostgreSQLhttps://www.postgresql.org

Команда SELECT — https://postgrespro.ru/docs/postgresql/15/sql-select

Документация — Функция COALESCE()https://postgrespro.ru/docs/postgresql/15/functions-conditional#FUNCTIONS-COALESCE-NVL-IFNULL