--1.isNull
檢查參數是否為NULL。
isNull(x)
參數
x — 一個非復合數據類型的值。
返回值
1 如果x為NULL。
0 如果x不為NULL。
示例
存在以下內容的表
┌─x─┬────y─┐ │ 1 │ ᴺᵁᴸᴸ │ │ 2 │ 3 │ └───┴──────┘
對其進行查詢
:) SELECT x FROM t_null WHERE isNull(y) SELECT x FROM t_null WHERE isNull(y) ┌─x─┐ │ 1 │ └───┘ 1 rows in set. Elapsed: 0.010 sec.
--2.isNotNull
檢查參數是否不為 NULL.
isNotNull(x)
參數:
x — 一個非復合數據類型的值。
返回值
0 如果x為NULL。
1 如果x不為NULL。
示例
存在以下內容的表
┌─x─┬────y─┐ │ 1 │ ᴺᵁᴸᴸ │ │ 2 │ 3 │ └───┴──────┘
對其進行查詢
:) SELECT x FROM t_null WHERE isNotNull(y) SELECT x FROM t_null WHERE isNotNull(y) ┌─x─┐ │ 2 │ └───┘
1 rows in set. Elapsed: 0.010 sec.
合並
檢查從左到右是否傳遞了«NULL»參數並返回第一個非'NULL參數。
--3.coalesce(x,...)
參數:
任何數量的非復合類型的參數。所有參數必須與數據類型兼容。
返回值
第一個非’NULL`參數。
NULL,如果所有參數都是’NULL`。
示例
考慮可以指定多種聯系客戶的方式的聯系人列表。
┌─name─────┬─mail─┬─phone─────┬──icq─┐ │ client 1 │ ᴺᵁᴸᴸ │ 123-45-67 │ 123 │ │ client 2 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ └──────────┴──────┴───────────┴──────┘
mail和phone字段是String類型,但icq字段是UInt32,所以它需要轉換為String。
從聯系人列表中獲取客戶的第一個可用聯系方式:
:) SELECT coalesce(mail, phone, CAST(icq,'Nullable(String)')) FROM aBook SELECT coalesce(mail, phone, CAST(icq, 'Nullable(String)')) FROM aBook ┌─name─────┬─coalesce(mail, phone, CAST(icq, 'Nullable(String)'))─┐ │ client 1 │ 123-45-67 │ │ client 2 │ ᴺᵁᴸᴸ │ └──────────┴──────────────────────────────────────────────────────┘
2 rows in set. Elapsed: 0.006 sec.
--4.ifNull
如果第一個參數為«NULL»,則返回第二個參數的值。
ifNull(x,alt)
參數:
x — 要檢查«NULL»的值。
alt — 如果x為’NULL`,函數返回的值。
返回值
價值 x,如果 x 不是 NULL.
價值 alt,如果 x 是 NULL.
示例
SELECT ifNull('a', 'b') ┌─ifNull('a', 'b')─┐ │ a │ └──────────────────┘ SELECT ifNull(NULL, 'b') ┌─ifNull(NULL, 'b')─┐ │ b │ └───────────────────┘
nullIf
如果參數相等,則返回NULL。
nullIf(x, y)
參數:
x, y — 用於比較的值。 它們必須是類型兼容的,否則將拋出異常。
返回值
如果參數相等,則為NULL。
如果參數不相等,則為x值。
示例
SELECT nullIf(1, 1) ┌─nullIf(1, 1)─┐ │ ᴺᵁᴸᴸ │ └──────────────┘ SELECT nullIf(1, 2) ┌─nullIf(1, 2)─┐ │ 1 │ └──────────────┘
--5.assumeNotNull
將可為空類型的值轉換為非Nullable類型的值。
assumeNotNull(x)
參數:
x — 原始值。
返回值
如果x不為NULL,返回非Nullable類型的原始值。
如果x為NULL,返回對應非Nullable類型的默認值。
示例
存在如下t_null表。
SHOW CREATE TABLE t_null ┌─statement─────────────────────────────────────────────────────────────────┐ │ CREATE TABLE default.t_null ( x Int8, y Nullable(Int8)) ENGINE = TinyLog │ └───────────────────────────────────────────────────────────────────────────┘ ┌─x─┬────y─┐ │ 1 │ ᴺᵁᴸᴸ │ │ 2 │ 3 │ └───┴──────┘
將列y作為assumeNotNull函數的參數。
SELECT assumeNotNull(y) FROM t_null ┌─assumeNotNull(y)─┐ │ 0 │ │ 3 │ └──────────────────┘ SELECT toTypeName(assumeNotNull(y)) FROM t_null ┌─toTypeName(assumeNotNull(y))─┐ │ Int8 │ │ Int8 │ └──────────────────────────────┘
可調整
將參數的類型轉換為Nullable。
--6.toNullable(x)
參數:
x — 任何非復合類型的值。
返回值
輸入的值,但其類型為Nullable。
示例
SELECT toTypeName(10) ┌─toTypeName(10)─┐ │ UInt8 │ └────────────────┘ SELECT toTypeName(toNullable(10)) ┌─toTypeName(toNullable(10))─┐ │ Nullable(UInt8) │ └────────────────────────────┘