You need to enable JavaScript to run this app.
导航
Nullable 函数
最近更新时间:2024.12.04 11:17:20首次发布时间:2022.02.28 12:33:07

assumeNotNull

结果为 Nullable 类型的等效非Nullable值。如果原始值为NULL,则结果不确定。另请参阅ifNullcoalesce函数。
语法

assumeNotNull(x)

参数:

  • x— 原始值。

返回值

  • 如果不为 NULL ,则为非 Nullable 类型的原始值。
  • 如果原始值为 NULL,则实现特定的结果。

示例

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                         │
└──────────────────┴──────────────────────────────┘
纯文本

coalesce

从左到右检查是否传递了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 │ ᴺᵁᴸᴸ                                                 │
└──────────┴──────────────────────────────────────────────────────┘

ifNull

如果主要参数是,则返回另一个值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                 │
└───────────────────┘

isNotNull

检查参数是否为 NULL。
语法

isNotNull(x)

参数:

  • x— 具有非复合数据类型的值。

返回值

  • 0如果xNULL
  • 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 │
└───┘

isNull

检查参数是否为 NULL。
语法

isNull(x)

参数

  • x— 具有非复合数据类型的值。

返回值

  • 1如果xNULL
  • 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 │
└───┘

nullIf

如果参数相等则返回NULL
语法

nullIf(x, y)

参数

  • x, y— 用于比较的值。它们必须是兼容的类型,否则 Bytehouse 将生成异常。

返回值

  • NULL,如果参数相等。
  • x如果参数不相等则为该值。

示例

SELECT nullIf(1, 1);
┌─nullIf(1, 1)─┐
│ ᴺᵁᴸᴸ         │
└──────────────┘
SELECT nullIf(1, 2);
┌─nullIf(1, 2)─┐
│ 1            │
└──────────────┘

toNullable

将参数类型转换为Nullable
语法

toNullable(x)

参数

  • x— 任何非复合类型的值。

返回值

  • 具有类型的输入值Nullable

示例

SELECT toTypeName(10);
┌─toTypeName(10)─┐
│ UInt8          │
└────────────────┘
SELECT toTypeName(toNullable(10));
┌─toTypeName(toNullable(10))─┐
│ Nullable(UInt8)            │
└────────────────────────────┘