Functions for Working with Nullable Values
isNull
Returns whether the argument is NULL.
isNull(x)
Alias: ISNULL
.
Arguments
x
— A value of non-compound data type.
Returned value
1
ifx
isNULL
.0
ifx
is notNULL
.
Example
Table:
┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 2 │ 3 │
└───┴──────┘
Query:
SELECT x FROM t_null WHERE isNull(y);
Result:
┌─x─┐
│ 1 │
└───┘
isNotNull
Returns whether the argument is not NULL.
isNotNull(x)
Arguments:
x
— A value of non-compound data type.
Returned value
1
ifx
is notNULL
.0
ifx
isNULL
.
Example
Table:
┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 2 │ 3 │
└───┴──────┘
Query:
SELECT x FROM t_null WHERE isNotNull(y);
Result:
┌─x─┐
│ 2 │
└───┘
isZeroOrNull
Returns whether the argument is 0 (zero) or NULL.
isZeroOrNull(x)
Arguments:
x
— A value of non-compound data type.
Returned value
1
ifx
is 0 (zero) orNULL
.0
else.
Example
Table:
┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 2 │ 0 │
│ 3 │ 3 │
└───┴──────┘
Query:
SELECT x FROM t_null WHERE isZeroOrNull(y);
Result:
┌─x─┐
│ 1 │
│ 2 │
└───┘
coalesce
Returns the leftmost non-NULL
argument.
coalesce(x,...)
Arguments:
- Any number of parameters of non-compound type. All parameters must be of mutually compatible data types.
Returned values
- The first non-
NULL
argument NULL
, if all arguments areNULL
.
Example
Consider a list of contacts that may specify multiple ways to contact a customer.
┌─name─────┬─mail─┬─phone─────┬──telegram─┐
│ client 1 │ ᴺᵁᴸᴸ │ 123-45-67 │ 123 │
│ client 2 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │
└──────────┴──────┴───────────┴───────────┘
The mail
and phone
fields are of type String, but the icq
field is UInt32
, so it needs to be converted to String
.
Get the first available contact method for the customer from the contact list:
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
Returns an alternative value if the argument is NULL
.
ifNull(x, alt)
Arguments:
x
— The value to check forNULL
.alt
— The value that the function returns ifx
isNULL
.
Returned values
x
ifx
is notNULL
.alt
ifx
isNULL
.
Example
Query:
SELECT ifNull('a', 'b');
Result:
┌─ifNull('a', 'b')─┐
│ a │
└──────────────────┘
Query:
SELECT ifNull(NULL, 'b');
Result:
┌─ifNull(NULL, 'b')─┐
│ b │
└───────────────────┘
nullIf
Returns NULL
if both arguments are equal.
nullIf(x, y)
Arguments:
x
, y
— Values to compare. Must be of compatible types.
Returned values
NULL
if the arguments are equal.x
if the arguments are not equal.
Example
Query:
SELECT nullIf(1, 1);
Result:
┌─nullIf(1, 1)─┐
│ ᴺᵁᴸᴸ │
└──────────────┘
Query:
SELECT nullIf(1, 2);
Result:
┌─nullIf(1, 2)─┐
│ 1 │
└──────────────┘
assumeNotNull
Returns the corresponding non-Nullable
value for a value of Nullable type. If the original value is NULL
, an arbitrary result can be returned. See also functions ifNull
and coalesce
.
assumeNotNull(x)
Arguments:
x
— The original value.
Returned values
- The input value as non-
Nullable
type, if it is notNULL
. - An arbitrary value, if the input value is
NULL
.
Example
Table:
┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 2 │ 3 │
└───┴──────┘
Query:
SELECT assumeNotNull(y) FROM table;
Result:
┌─assumeNotNull(y)─┐
│ 0 │
│ 3 │
└──────────────────┘
Query:
SELECT toTypeName(assumeNotNull(y)) FROM t_null;
Result:
┌─toTypeName(assumeNotNull(y))─┐
│ Int8 │
│ Int8 │
└──────────────────────────────┘
toNullable
Converts the argument type to Nullable
.
toNullable(x)
Arguments:
x
— A value of non-compound type.
Returned value
- The input value but of
Nullable
type.
Example
Query:
SELECT toTypeName(10);
Result:
┌─toTypeName(10)─┐
│ UInt8 │
└────────────────┘
Query:
SELECT toTypeName(toNullable(10));
Result:
┌─toTypeName(toNullable(10))─┐
│ Nullable(UInt8) │
└────────────────────────────┘