十九、clickhouse的Nullable處理函數


--1.isNull
檢查參數是否為NULL。

isNull(x)
參數

x — 一個非復合數據類型的值。
返回值

1 如果x為NULL。
0 如果x不為NULL。
示例

存在以下內容的表

┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 23 │
└───┴──────┘


對其進行查詢

:) 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 │ ᴺᵁᴸᴸ │
│ 23 │
└───┴──────┘

 


對其進行查詢

:) 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-67123 │
│ 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 1123-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 │ ᴺᵁᴸᴸ │
│ 23 │
└───┴──────┘

 

將列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) │
└────────────────────────────┘

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM