ClickHouse/docs/ja/sql-reference/functions/functions-for-nulls.md
2024-11-18 11:58:58 +09:00

9.0 KiB
Raw Blame History

slug sidebar_position sidebar_label
/ja/sql-reference/functions/functions-for-nulls 135 Nullable

Nullable 値を扱う関数

isNull

引数が NULL かどうかを返します。

演算子 IS NULL も参照してください。

構文

isNull(x)

別名: ISNULL.

引数

  • x — 非複合データ型の値。

返される値

  • xNULL の場合は 1
  • xNULL でない場合は 0

テーブル:

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

クエリ:

SELECT x FROM t_null WHERE isNull(y);

結果:

┌─x─┐
│ 1 │
└───┘

isNullable

カラムが Nullable かどうかを返します。Nullable は NULL 値を許可することを意味します。

構文

isNullable(x)

引数

  • x — カラム。

返される値

  • xNULL 値を許可する場合は 1UInt8.
  • xNULL 値を許可しない場合は 0UInt8.

クエリ:

CREATE TABLE tab (ordinary_col UInt32, nullable_col Nullable(UInt32)) ENGINE = Log;
INSERT INTO tab (ordinary_col, nullable_col) VALUES (1,1), (2, 2), (3,3);
SELECT isNullable(ordinary_col), isNullable(nullable_col) FROM tab;    

結果:

   ┌───isNullable(ordinary_col)──┬───isNullable(nullable_col)──┐
1. │                           0 │                           1 │
2. │                           0 │                           1 │
3. │                           0 │                           1 │
   └─────────────────────────────┴─────────────────────────────┘

isNotNull

引数が NULL でないかどうかを返します。

演算子 IS NOT NULL も参照してください。

isNotNull(x)

引数:

  • x — 非複合データ型の値。

返される値

  • xNULL でない場合は 1
  • xNULL の場合は 0

テーブル:

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

クエリ:

SELECT x FROM t_null WHERE isNotNull(y);

結果:

┌─x─┐
│ 2 │
└───┘

isNotDistinctFrom

NULL セーフな比較を行います。これは、JOIN ON セクションで NULL 値を含む JOIN キーを比較するために使用されます。この関数は 2 つの NULL 値を同一とみなし、通常の等号の動作とは異なり、2 つの NULL 値を比較すると NULL を返します。

:::note この関数は JOIN ON の実装に使用される内部関数です。クエリで手動で使用しないでください。 :::

構文

isNotDistinctFrom(x, y)

引数

  • x — 第1の JOIN キー。
  • y — 第2の JOIN キー。

返される値

  • xy が両方とも NULL の場合は true
  • それ以外の場合は false

完全な例については、JOIN キーにおける NULL 値を参照してください。

isZeroOrNull

引数が 0ゼロまたは NULL かどうかを返します。

isZeroOrNull(x)

引数:

  • x — 非複合データ型の値。

返される値

  • x が 0ゼロまたは NULL の場合は 1
  • それ以外は 0

テーブル:

┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 2 │    0 │
│ 3 │    3 │
└───┴──────┘

クエリ:

SELECT x FROM t_null WHERE isZeroOrNull(y);

結果:

┌─x─┐
│ 1 │
│ 2 │
└───┘

coalesce

最も左にあるNULL でない引数を返します。

coalesce(x,...)

引数:

  • 複合型でない任意の数のパラメータ。すべてのパラメータは互いに互換性のあるデータ型である必要があります。

返される値

  • 最初の NULL でない引数
  • すべての引数が NULL の場合、NULL

顧客に連絡するための複数の方法を示す連絡先のリストを考えてみましょう。

┌─name─────┬─mail─┬─phone─────┬──telegram─┐
│ client 1 │ ᴺᵁᴸᴸ │ 123-45-67 │       123 │
│ client 2 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ      │      ᴺᵁᴸᴸ │
└──────────┴──────┴───────────┴───────────┘

mailphone フィールドは String の型ですが、telegram フィールドは UInt32 なので String に変換する必要があります。

顧客のために最初に利用可能な連絡方法を連絡先リストから取得します:

SELECT name, coalesce(mail, phone, CAST(telegram,'Nullable(String)')) FROM aBook;
┌─name─────┬─coalesce(mail, phone, CAST(telegram, 'Nullable(String)'))─┐
│ client 1 │ 123-45-67                                                 │
│ client 2 │ ᴺᵁᴸᴸ                                                      │
└──────────┴───────────────────────────────────────────────────────────┘

ifNull

引数が NULL である場合に代替値を返します。

ifNull(x, alt)

引数:

  • xNULL かどうかを確認する値。
  • altxNULL である場合に関数が返す値。

返される値

  • xNULL でない場合、x
  • xNULL の場合、alt

クエリ:

SELECT ifNull('a', 'b');

結果:

┌─ifNull('a', 'b')─┐
│ a                │
└──────────────────┘

クエリ:

SELECT ifNull(NULL, 'b');

結果:

┌─ifNull(NULL, 'b')─┐
│ b                 │
└───────────────────┘

nullIf

2つの引数が等しい場合、NULL を返します。

nullIf(x, y)

引数:

x, y — 比較する値。互換性のある型である必要があります。

返される値

  • 引数が等しい場合、NULL
  • 引数が等しくない場合、x

クエリ:

SELECT nullIf(1, 1);

結果:

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

クエリ:

SELECT nullIf(1, 2);

結果:

┌─nullIf(1, 2)─┐
│            1 │
└──────────────┘

assumeNotNull

Nullable 型の値に対して、対応する非 Nullable 値を返します。元の値が NULL の場合、任意の結果が返される可能性があります。関数 ifNull および coalesce も参照してください。

assumeNotNull(x)

引数:

  • x — 元の値。

返される値

  • 値が NULL でない場合、入力値を非 Nullable 型で返します。
  • 入力値が NULL の場合、任意の値。

テーブル:


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

クエリ:

SELECT assumeNotNull(y) FROM table;

結果:

┌─assumeNotNull(y)─┐
│                0 │
│                3 │
└──────────────────┘

クエリ:

SELECT toTypeName(assumeNotNull(y)) FROM t_null;

結果:

┌─toTypeName(assumeNotNull(y))─┐
│ Int8                         │
│ Int8                         │
└──────────────────────────────┘

toNullable

引数の型を Nullable に変換します。

toNullable(x)

引数:

  • x — 非複合型の値。

返される値

  • 入力値を Nullable 型として返します。

クエリ:

SELECT toTypeName(10);

結果:

┌─toTypeName(10)─┐
│ UInt8          │
└────────────────┘

クエリ:

SELECT toTypeName(toNullable(10));

結果:

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