Перейти к основному содержимому
Перейти к основному содержимому

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

isNull

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

Смотрите также оператор IS NULL.

Синтаксис

isNull(x)

Псевдоним: ISNULL.

Аргументы

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

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

  • 1, если x равно NULL.
  • 0, если x не равно NULL.

Пример

Таблица:

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

Запрос:

SELECT x FROM t_null WHERE isNull(y);

Результат:

┌─x─┐
│ 1 │
└───┘

isNullable

Возвращает 1, если колонка является Nullable (то есть позволяет значения NULL), и 0 в противном случае.

Синтаксис

isNullable(x)

Аргументы

  • x — колонка.

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

  • 1, если x позволяет значения NULL. UInt8.
  • 0, если x не позволяет значения NULL. UInt8.

Пример

Запрос:

CREATE TABLE tab (ordinary_col UInt32, nullable_col Nullable(UInt32)) ENGINE = Log;
INSERT INTO tab (ordinary_col, nullable_col) VALUES (1,1), (2, 2), (3,3);
SELECT isNullable(ordinary_col), isNullable(nullable_col) FROM tab;    

Результат:

   ┌───isNullable(ordinary_col)──┬───isNullable(nullable_col)──┐
1. │                           0 │                           1 │
2. │                           0 │                           1 │
3. │                           0 │                           1 │
   └─────────────────────────────┴─────────────────────────────┘

isNotNull

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

Смотрите также оператор IS NOT NULL.

isNotNull(x)

Аргументы:

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

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

  • 1, если x не равно NULL.
  • 0, если x равно NULL.

Пример

Таблица:

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

Запрос:

SELECT x FROM t_null WHERE isNotNull(y);

Результат:

┌─x─┐
│ 2 │
└───┘

isNotDistinctFrom

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

примечание

Эта функция является внутренней функцией, используемой реализацией JOIN ON. Пожалуйста, не используйте её вручную в запросах.

Синтаксис

isNotDistinctFrom(x, y)

Аргументы

  • x — первый ключ JOIN.
  • y — второй ключ JOIN.

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

  • true, когда x и y оба равны NULL.
  • false в противном случае.

Пример

Для полного примера смотрите: NULL значения в ключах JOIN.

isZeroOrNull

Возвращает, является ли аргумент 0 (ноль) или NULL.

isZeroOrNull(x)

Аргументы:

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

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

  • 1, если x равно 0 (ноль) или NULL.
  • 0 в противном случае.

Пример

Таблица:

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

Запрос:

SELECT x FROM t_null WHERE isZeroOrNull(y);

Результат:

┌─x─┐
│ 1 │
│ 2 │
└───┘

coalesce

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

coalesce(x,...)

Аргументы:

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

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

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

Пример

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

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

Поля mail и phone имеют тип String, но поле telegram — это UInt32, поэтому его нужно преобразовать в String.

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

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

ifNull

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

ifNull(x, alt)

Аргументы:

  • x — Значение, которое необходимо проверить на NULL.
  • alt — Значение, которое функция возвращает, если x равно NULL.

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

  • x, если x не равно NULL.
  • alt, если x равно NULL.

Пример

Запрос:

SELECT ifNull('a', 'b');

Результат:

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

Запрос:

SELECT ifNull(NULL, 'b');

Результат:

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

nullIf

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

nullIf(x, y)

Аргументы:

x, y — Значения для сравнения. Должны быть совместимы по типам.

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

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

Пример

Запрос:

SELECT nullIf(1, 1);

Результат:

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

Запрос:

SELECT nullIf(1, 2);

Результат:

┌─nullIf(1, 2)─┐
│            1 │
└──────────────┘

assumeNotNull

Возвращает соответствующее значение не-Nullable для значения типа Nullable. Если исходное значение равно NULL, может быть возвращено произвольное значение. Смотрите также функции ifNull и coalesce.

assumeNotNull(x)

Аргументы:

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

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

  • Входное значение в виде не-Nullable типа, если оно не равно NULL.
  • Произвольное значение, если входное значение равно NULL.

Пример

Таблица:


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

Запрос:

SELECT assumeNotNull(y) FROM table;

Результат:

┌─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)            │
└────────────────────────────┘