Nullable处理函数

    参数

    • — 一个非复合数据类型的值。

    返回值

    • 1 如果xNULL
    • 0 如果x不为NULL

    示例

    存在以下内容的表

    1. ┌─x─┬────y─┐
    2. 1 ᴺᵁᴸᴸ
    3. 2 3
    4. └───┴──────┘

    对其进行查询

    1. :) SELECT x FROM t_null WHERE isNull(y)
    2. SELECT x
    3. FROM t_null
    4. WHERE isNull(y)
    5. ┌─x─┐
    6. 1
    7. └───┘
    8. 1 rows in set. Elapsed: 0.010 sec.

    isNotNull

    检查参数是否不为 .

    1. isNotNull(x)

    参数:

    • x — 一个非复合数据类型的值。

    返回值

    • 0 如果xNULL
    • 1 如果x不为NULL

    示例

    存在以下内容的表

    1. ┌─x─┬────y─┐
    2. 1 ᴺᵁᴸᴸ
    3. 2 3
    4. └───┴──────┘

    对其进行查询

    1. :) SELECT x FROM t_null WHERE isNotNull(y)
    2. SELECT x
    3. FROM t_null
    4. WHERE isNotNull(y)
    5. ┌─x─┐
    6. └───┘
    7. 1 rows in set. Elapsed: 0.010 sec.

    参数:

    • 任何数量的非复合类型的参数。所有参数必须与数据类型兼容。

    返回值

    • 第一个非’NULL`参数。
    • NULL,如果所有参数都是’NULL`。

    示例

    考虑可以指定多种联系客户的方式的联系人列表。

    1. ┌─name─────┬─mail─┬─phone─────┬──icq─┐
    2. client 2 ᴺᵁᴸᴸ ᴺᵁᴸᴸ ᴺᵁᴸᴸ
    3. └──────────┴──────┴───────────┴──────┘

    mailphone字段是String类型,但icq字段是UInt32,所以它需要转换为String

    从联系人列表中获取客户的第一个可用联系方式:

    1. :) SELECT coalesce(mail, phone, CAST(icq,'Nullable(String)')) FROM aBook
    2. SELECT coalesce(mail, phone, CAST(icq, 'Nullable(String)'))
    3. FROM aBook
    4. ┌─name─────┬─coalesce(mail, phone, CAST(icq, 'Nullable(String)'))─┐
    5. client 1 123-45-67
    6. client 2 ᴺᵁᴸᴸ
    7. └──────────┴──────────────────────────────────────────────────────┘
    8. 2 rows in set. Elapsed: 0.006 sec.

    ifNull

    如果第一个参数为«NULL»,则返回第二个参数的值。

    1. ifNull(x,alt)

    参数:

    • x — 要检查«NULL»的值。
    • alt — 如果x为’NULL`,函数返回的值。

    返回值

    • 价值 x,如果 x 不是 NULL.
    • 价值 alt,如果 xNULL.

    示例

    1. SELECT ifNull('a', 'b')
    2. ┌─ifNull('a', 'b')─┐
    3. a
    4. └──────────────────┘
    5. SELECT ifNull(NULL, 'b')
    6. ┌─ifNull(NULL, 'b')─┐
    7. b
    8. └───────────────────┘

    如果参数相等,则返回NULL

    1. nullIf(x, y)

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

    返回值

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

    示例

    assumeNotNull

    可为空类型的值转换为非Nullable类型的值。

      参数:

      • — 原始值。

      返回值

      • 如果x不为NULL,返回非Nullable类型的原始值。
      • 如果xNULL,返回对应非Nullable类型的默认值。

      示例

      存在如下t_null表。

      1. SHOW CREATE TABLE t_null
      2. ┌─statement─────────────────────────────────────────────────────────────────┐
      3. CREATE TABLE default.t_null ( x Int8, y Nullable(Int8)) ENGINE = TinyLog
      4. └───────────────────────────────────────────────────────────────────────────┘
      5. ┌─x─┬────y─┐
      6. 1 ᴺᵁᴸᴸ
      7. 2 3
      8. └───┴──────┘

      将列y作为assumeNotNull函数的参数。

      1. SELECT assumeNotNull(y) FROM t_null
      2. ┌─assumeNotNull(y)─┐
      3. 0
      4. 3
      5. └──────────────────┘
      6. SELECT toTypeName(assumeNotNull(y)) FROM t_null
      7. ┌─toTypeName(assumeNotNull(y))─┐
      8. Int8
      9. Int8
      10. └──────────────────────────────┘

      将参数的类型转换为Nullable

      1. toNullable(x)

      参数:

      • x — 任何非复合类型的值。
      • 输入的值,但其类型为Nullable

      示例

      1. SELECT toTypeName(10)
      2. ┌─toTypeName(10)─┐
      3. UInt8
      4. └────────────────┘
      5. SELECT toTypeName(toNullable(10))
      6. ┌─toTypeName(toNullable(10))─┐
      7. Nullable(UInt8)
      8. └────────────────────────────┘