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

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

assumeNotNull

Впервые представлена в версии v1.1

Возвращает соответствующее значение не-Nullable типа для значения типа Nullable. Если исходное значение равно NULL, может быть возвращён произвольный результат.

См. также: функции ifNull и coalesce.

Синтаксис

assumeNotNull(x)

Аргументы

  • x — исходное значение любого nullable-типа. Nullable(T)

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

Возвращает значение не-nullable типа, если исходное значение не равно NULL, в противном случае — произвольное значение, если входное значение равно NULL. Any

Примеры

Пример использования

CREATE TABLE t_null (x Int8, y Nullable(Int8))
ENGINE=MergeTree()
ORDER BY x;

INSERT INTO t_null VALUES (1, NULL), (2, 3);

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

coalesce

Добавлено в: v1.1

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

Синтаксис

coalesce(x[, y, ...])

Аргументы

  • x[, y, ...] — Произвольное количество параметров простого (несоставного) типа. Все параметры должны иметь взаимно совместимые между собой типы данных. Any

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

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

Примеры

Пример использования

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

CREATE TABLE aBook
(
    name String,
    mail Nullable(String),
    phone Nullable(String),
    telegram Nullable(UInt32)
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO aBook VALUES ('client 1', NULL, '123-45-67', 123), ('client 2', NULL, NULL, NULL);

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

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

SELECT name, coalesce(mail, phone, CAST(telegram,'Nullable(String)')) FROM aBook;
┌─имя──────┬─coalesce(mail, phone, CAST(telegram, 'Nullable(String)'))─┐
│ клиент 1 │ 123-45-67                                                 │
│ клиент 2 │ ᴺᵁᴸᴸ                                                      │
└──────────┴───────────────────────────────────────────────────────────┘

firstNonDefault

Появилась в версии: v25.9

Возвращает первое значение из набора аргументов, не равное значению по умолчанию

Синтаксис

Аргументы

  • arg1 — первый аргумент для проверки - arg2 — второй аргумент для проверки - ... — дополнительные аргументы для проверки

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

Тип результата — супертип всех аргументов

Примеры

целые числа

SELECT firstNonDefault(0, 1, 2)
1

строки

SELECT firstNonDefault('', 'hello', 'world')
'привет'

Значения NULL

SELECT firstNonDefault(NULL, 0 :: UInt8, 1 :: UInt8)
1

нулевое значение для Nullable

SELECT firstNonDefault(NULL, 0 :: Nullable(UInt8), 1 :: Nullable(UInt8))
0

ifNull

Появилось в версии v1.1

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

Синтаксис

ifNull(x, alt)

Аргументы

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

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

Возвращает значение x, если оно не равно NULL, в противном случае — alt. Any

Примеры

Пример использования

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

isNotNull

Впервые появилась в версии: v1.1

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

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

Синтаксис

isNotNull(x)

Аргументы

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

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

Возвращает 1, если x не NULL, иначе 0. UInt8

Примеры

Пример использования

CREATE TABLE t_null
(
  x Int32,
  y Nullable(Int32)
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO t_null VALUES (1, NULL), (2, 3);

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

isNull

Добавлена в: v1.1

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

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

Синтаксис

isNull(x)

Аргументы

  • x — значение простого (несоставного) типа данных. Any

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

Возвращает 1, если x равно NULL, в противном случае — 0. UInt8

Примеры

Пример использования

CREATE TABLE t_null
(
  x Int32,
  y Nullable(Int32)
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO t_null VALUES (1, NULL), (2, 3);

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

isNullable

Введена в версии v22.7

Проверяет, является ли тип данных аргумента Nullable (то есть допускает значения NULL).

Синтаксис

isNullable(x)

Аргументы

  • x — значение любого типа данных. Any

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

Возвращает 1, если x имеет тип данных Nullable, иначе 0. UInt8

Примеры

Пример использования

CREATE TABLE tab (
    ordinary_col UInt32,
    nullable_col Nullable(UInt32)
)
ENGINE = MergeTree
ORDER BY tuple();
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)──┐
│                           0 │                           1 │
│                           0 │                           1 │
│                           0 │                           1 │
└─────────────────────────────┴─────────────────────────────┘

isZeroOrNull

Добавлена в: v20.3

Проверяет, равен ли аргумент нулю (0) или имеет значение NULL.

Синтаксис

isZeroOrNull(x)

Аргументы

  • x — числовое значение. UInt

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

Возвращает 1, если x равно NULL или нулю, в противном случае — 0. UInt8/16/32/64 или Float32/Float64

Примеры

Пример использования

CREATE TABLE t_null
(
  x Int32,
  y Nullable(Int32)
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO t_null VALUES (1, NULL), (2, 0), (3, 3);

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

nullIf

Впервые появилась в версии v1.1

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

Синтаксис

nullIf(x, y)

Аргументы

  • x — первое значение. Any
  • y — второе значение. Any

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

Возвращает NULL, если оба аргумента равны, в противном случае — первый аргумент. NULL или Nullable(x)

Примеры

Пример использования

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

toNullable

Введён в версии v1.1

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

Синтаксис

toNullable(x)

Аргументы

  • x — значение любого несоставного типа. Any

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

Возвращает входное значение, но типа Nullable. Nullable(Any)

Примеры

Пример использования

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