assumeNotNull
引入于:v1.1
返回 Nullable
类型值对应的非Nullable
值。
如果原始值为NULL
,则可以返回任意结果。
另请参见:函数 ifNull
和 coalesce
。
语法
参数
返回值
如果原始值不是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
参数。
语法
参数
x[, y, ...]
— 任何数量的非复合类型参数。所有参数必须是相互兼容的数据类型。 Any
返回值
返回第一个非NULL
参数;如果所有参数均为NULL
,则返回NULL
。 Any
或 NULL
示例
使用示例
-- Consider a list of contacts that may specify multiple ways to contact a customer.
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);
-- The mail and phone fields are of type String, but the telegram 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 │ ᴺᵁᴸᴸ │
└──────────┴───────────────────────────────────────────────────────────┘
firstNonDefault
引入于:v25.9
返回一组参数中的第一个非默认值
语法
参数
arg1
— 第一个要检查的参数 - arg2
— 第二个要检查的参数 - ...
— 其他要检查的参数
返回值
结果类型为所有参数的超类型
示例
整数
SELECT firstNonDefault(0, 1, 2)
字符串
SELECT firstNonDefault('', 'hello', 'world')
空值
SELECT firstNonDefault(NULL, 0 :: UInt8, 1 :: UInt8)
可为NULL的零
SELECT firstNonDefault(NULL, 0 :: Nullable(UInt8), 1 :: Nullable(UInt8))
ifNull
引入于:v1.1
如果第一个参数为NULL
,则返回一个替代值。
语法
参数
x
— 要检查是否为NULL
的值。 Any
alt
— 如果x
为NULL
,该函数返回的值。 Any
返回值
如果x
不为NULL
,则返回x
的值;否则返回alt
。 Any
示例
使用示例
SELECT ifNull('a', 'b'), ifNull(NULL, 'b');
┌─ifNull('a', 'b')─┬─ifNull(NULL, 'b')─┐
│ a │ b │
└──────────────────┴───────────────────┘
isNotDistinctFrom
引入于:v23.8
执行两个JOIN
键之间的空安全比较。该函数会将两个NULL
值视为相同,并返回true
,这与通常的相等行为不同,通常比较两个NULL
值会返回NULL
。
信息
该函数是JOIN ON
实现中使用的内部函数。
请勿在查询中手动使用。
有关完整示例,请参见: JOIN
键中的 NULL
值。
语法
参数
x
— 第一个要比较的JOIN
键。 Any
y
— 第二个要比较的JOIN
键。 Any
返回值
当x
和y
均为NULL
时返回true
,否则返回false
。 Bool
示例
isNotNull
引入于:v1.1
检查参数是否不为NULL
。
另请参见:运算符 IS NOT NULL
。
语法
参数
返回值
如果x
不为NULL
,则返回1
;否则返回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);
isNull
引入于:v1.1
检查参数是否为NULL
。
另请参见:运算符 IS NULL
。
语法
参数
返回值
如果x
为NULL
,则返回1
;否则返回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);
isNullable
引入于:v22.7
检查参数的数据类型是否为Nullable
(即是否允许NULL
值)。
语法
参数
返回值
如果x
的数据类型为Nullable
,则返回1
;否则返回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
。
语法
参数
返回值
如果x
为NULL
或等于零,则返回1
;否则返回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);
nullIf
引入于:v1.1
如果两个参数相等,则返回NULL
。
语法
参数
返回值
如果两个参数相等,则返回NULL
,否则返回第一个参数。 NULL
或 Nullable(x)
示例
使用示例
SELECT nullIf(1, 1), nullIf(1, 2);
┌─nullIf(1, 1)─┬─nullIf(1, 2)─┐
│ ᴺᵁᴸᴸ │ 1 │
└──────────────┴──────────────┘
toNullable
引入于:v1.1
将提供的参数类型转换为Nullable
。
语法
参数
返回值
返回输入值但为Nullable
类型。 Nullable(Any)
示例
使用示例
SELECT toTypeName(10), toTypeName(toNullable(10));
┌─toTypeName(10)─┬─toTypeName(toNullable(10))─┐
│ UInt8 │ Nullable(UInt8) │
└────────────────┴────────────────────────────┘