Функции для работы с Nullable-аргументами
isNull
Проверяет является ли аргумент 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 │
└───┘
isNotNull
Проверяет не является ли аргумент NULL.
isNotNull(x)
Аргументы
x
— значение с не составным типом данных.
Возвращаемое значение
0
, еслиx
—NULL
.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, а поле icq
— UInt32
, его необходимо будет преобразовать в 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
— значение, которое функция вернёт, если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
— значения для сравнивания. Они должны быть совместимых типов, иначе 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) │
└────────────────────────────┘