Функции для работы с 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) │
└────────────────────────────┘