结果为 Nullable 类型的等效非Nullable
值。如果原始值为NULL
,则结果不确定。另请参阅ifNull
和coalesce
函数。
语法
assumeNotNull(x)
参数:
x
— 原始值。返回值
如果不为 NULL ,则为非 Nullable 类型的原始值。
示例
CREATE TABLE IF NOT EXISTS test.functionAssumeNotNull ( x Int8, y Nullable(Int8)) ENGINE = CnchMergeTree ORDER BY x; INSERT INTO test.functionAssumeNotNull VALUES (1,NULL),(2,3); SELECT * FROM test.functionAssumeNotNull;
┌─x─┬─y────┐ │ 1 │ ᴺᵁᴸᴸ │ │ 2 │ 3 │ └───┴──────┘
将assumeNotNull函数应用于y列。
SELECT assumeNotNull(y),toTypeName(assumeNotNull(y)) FROM test.functionAssumeNotNull;
┌─assumeNotNull(y)─┬─toTypeName(assumeNotNull(y))─┐ │ 0 │ Int8 │ │ 3 │ Int8 │ └──────────────────┴──────────────────────────────┘ 纯文本
从左到右检查是否传递了NULL
参数并返回第一个非NULL
参数。
语法
coalesce(x,...)
参数
返回值
NULL
论点。NULL
,如果所有参数都是NULL
。示例
考虑一个联系人列表,其中可能指定了多种联系客户的方式。
CREATE TABLE IF NOT EXISTS test.functionCoalesce (name String, mail Nullable(String), phone Nullable(String), icq Nullable(UInt32)) ENGINE=CnchMergeTree ORDER BY name; INSERT INTO test.functionCoalesce VALUES ('client 1', NULL, '123-45-67', 123), ('client 2', NULL, NULL, NULL); SELECT * FROM test.functionCoalesce;
┌─name─────┬─mail─┬─phone─────┬─icq──┐ │ client 1 │ ᴺᵁᴸᴸ │ 123-45-67 │ 123 │ │ client 2 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ └──────────┴──────┴───────────┴──────┘
mail
和字段的类型phone
为 String,但icq
字段的类型为UInt32
,因此需要将其转换为String
。
从联系人列表中获取客户的第一个可用联系方式:
SELECT name, coalesce(mail, phone, CAST(icq,'Nullable(String)')) FROM test.functionCoalesce;
┌─name─────┬─coalesce(mail, phone, CAST(icq, 'Nullable(String)'))─┐ │ client 1 │ 123-45-67 │ │ client 2 │ ᴺᵁᴸᴸ │ └──────────┴──────────────────────────────────────────────────────┘
如果主要参数是,则返回另一个值NULL
。
语法
ifNull(x,alt)
参数:
x
— 要检查的值NULL
。altx
—如果 ,则函数返回的值NULL
。返回值
x
如果x
不是,则值为NULL
。alt
其值为。xNULL
示例
SELECT ifNull('a', 'b');
┌─ifNull('a', 'b')─┐ │ a │ └──────────────────┘
SELECT ifNull(NULL, 'b');
┌─ifNull(NULL, 'b')─┐ │ b │ └───────────────────┘
检查参数是否为 NULL。
语法
isNotNull(x)
参数:
x
— 具有非复合数据类型的值。返回值
0
如果x
是NULL
。1
如果x
不是NULL
。示例
输入表:
CREATE TABLE IF NOT EXISTS test.functionIsNotNull (x UInt8, y Nullable(UInt8)) ENGINE=CnchMergeTree ORDER BY x; INSERT INTO test.functionIsNotNull VALUES (1, NULL),(2,3); SELECT * FROM test.functionIsNotNull;
┌─x─┬─y────┐ │ 1 │ ᴺᵁᴸᴸ │ │ 2 │ 3 │ └───┴──────┘
查询:
SELECT x FROM test.functionIsNotNull WHERE isNotNull(y);
┌─x─┐ │ 2 │ └───┘
检查参数是否为 NULL。
语法
isNull(x)
参数
x
— 具有非复合数据类型的值。返回值
1
如果x
是NULL
。0
如果x
不是NULL
。示例
输入表:
CREATE TABLE IF NOT EXISTS test.functionIsNull (x UInt8, y Nullable(UInt8)) ENGINE=CnchMergeTree ORDER BY x; INSERT INTO test.functionIsNull VALUES (1, NULL),(2,3); SELECT * FROM test.functionIsNull;
┌─x─┬─y────┐ │ 1 │ ᴺᵁᴸᴸ │ │ 2 │ 3 │ └───┴──────┘
查询:
SELECT x FROM test.functionIsNull WHERE isNull(y);
┌─x─┐ │ 1 │ └───┘
如果参数相等则返回NULL
。
语法
nullIf(x, y)
参数
x
, y
— 用于比较的值。它们必须是兼容的类型,否则 Bytehouse 将生成异常。返回值
NULL
,如果参数相等。x
如果参数不相等则为该值。示例
SELECT nullIf(1, 1);
┌─nullIf(1, 1)─┐ │ ᴺᵁᴸᴸ │ └──────────────┘
SELECT nullIf(1, 2);
┌─nullIf(1, 2)─┐ │ 1 │ └──────────────┘
将参数类型转换为Nullable
。
语法
toNullable(x)
参数
x
— 任何非复合类型的值。返回值
Nullable
。示例
SELECT toTypeName(10);
┌─toTypeName(10)─┐ │ UInt8 │ └────────────────┘
SELECT toTypeName(toNullable(10));
┌─toTypeName(toNullable(10))─┐ │ Nullable(UInt8) │ └────────────────────────────┘