Skip to main content

Функции для работы с Nullable-аргументами

isNull

Проверяет является ли аргумент NULL.

isNull(x)

Синоним: ISNULL.

Аргументы

  • x — значение с не составным типом данных.

Возвращаемое значение

  • 1, если xNULL.
  • 0, если x — не NULL.

Пример

Входная таблица

┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 2 │ 3 │
└───┴──────┘

Запрос

SELECT x FROM t_null WHERE isNull(y);
┌─x─┐
│ 1 │
└───┘

isNotNull

Проверяет не является ли аргумент NULL.

isNotNull(x)

Аргументы

  • x — значение с не составным типом данных.

Возвращаемое значение

  • 0, если xNULL.
  • 1, если x — не NULL.

Пример

Входная таблица

┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 2 │ 3 │
└───┴──────┘

Запрос

SELECT x FROM t_null WHERE isNotNull(y);
┌─x─┐
│ 2 │
└───┘

coalesce

Последовательно слева-направо проверяет являются ли переданные аргументы NULL и возвращает первый не NULL.

coalesce(x,...)

Аргументы

  • Произвольное количество параметров не составного типа. Все параметры должны быть совместимы по типу данных.

Возвращаемые значения

  • Первый не NULL аргумент.
  • NULL, если все аргументы — NULL.

Пример

Рассмотрим адресную книгу, в которой может быть указано несколько способов связи с клиентом.

┌─name─────┬─mail─┬─phone─────┬──icq─┐
│ client 1 │ ᴺᵁᴸᴸ │ 123-45-67 │ 123 │
│ client 2 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │
└──────────┴──────┴───────────┴──────┘

Поля mail и phone имеют тип String, а поле icqUInt32, его необходимо будет преобразовать в String.

Получим из адресной книги первый доступный способ связаться с клиентом:

SELECT coalesce(mail, phone, CAST(icq,'Nullable(String)')) FROM aBook;
┌─name─────┬─coalesce(mail, phone, CAST(icq, 'Nullable(String)'))─┐
│ client 1 │ 123-45-67 │
│ client 2 │ ᴺᵁᴸᴸ │
└──────────┴──────────────────────────────────────────────────────┘

ifNull

Возвращает альтернативное значение, если основной аргумент — NULL.

ifNull(x,alt)

Аргументы

  • x — значение для проверки на NULL,
  • alt — значение, которое функция вернёт, если xNULL.

Возвращаемые значения

  • Значение x, если x — не NULL.
  • Значение alt, если xNULL.

Пример

SELECT ifNull('a', 'b');
┌─ifNull('a', 'b')─┐
│ a │
└──────────────────┘
SELECT ifNull(NULL, 'b');
┌─ifNull(NULL, 'b')─┐
│ b │
└───────────────────┘

nullIf

Возвращает NULL, если аргументы равны.

nullIf(x, y)

Аргументы

x, y — значения для сравнивания. Они должны быть совместимых типов, иначе ClickHouse сгенерирует исключение.

Возвращаемые значения

  • NULL, если аргументы равны.
  • Значение x, если аргументы не равны.

Пример

SELECT nullIf(1, 1);
┌─nullIf(1, 1)─┐
│ ᴺᵁᴸᴸ │
└──────────────┘
SELECT nullIf(1, 2);
┌─nullIf(1, 2)─┐
│ 1 │
└──────────────┘

assumeNotNull

Приводит значение типа Nullable к не Nullable, если значение не NULL.

assumeNotNull(x)

Аргументы

  • x — исходное значение.

Возвращаемые значения

  • Исходное значение с не Nullable типом, если оно — не NULL.
  • Неспецифицированный результат, зависящий от реализации, если исходное значение — NULL.

Пример

Рассмотрим таблицу t_null.

SHOW CREATE TABLE t_null;
┌─statement─────────────────────────────────────────────────────────────────┐
│ CREATE TABLE default.t_null ( x Int8, y Nullable(Int8)) ENGINE = TinyLog │
└───────────────────────────────────────────────────────────────────────────┘
┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 2 │ 3 │
└───┴──────┘

Применим функцию assumeNotNull к столбцу y.

SELECT assumeNotNull(y) FROM t_null;
┌─assumeNotNull(y)─┐
│ 0 │
│ 3 │
└──────────────────┘
SELECT toTypeName(assumeNotNull(y)) FROM t_null;
┌─toTypeName(assumeNotNull(y))─┐
│ Int8 │
│ Int8 │
└──────────────────────────────┘

toNullable

Преобразует тип аргумента к Nullable.

toNullable(x)

Аргументы

  • x — значение произвольного не составного типа.

Возвращаемое значение

  • Входное значение с типом не Nullable.

Пример

SELECT toTypeName(10);
┌─toTypeName(10)─┐
│ UInt8 │
└────────────────┘
SELECT toTypeName(toNullable(10));
┌─toTypeName(toNullable(10))─┐
│ Nullable(UInt8) │
└────────────────────────────┘