メインコンテンツまでスキップ
メインコンテンツまでスキップ

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 である場合は 1 を返し(つまり、NULL 値を許可)、そうでない場合は 0 を返します。

構文

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 値を同一と見なし、true を返します。これは、通常の等値比較の動作とは異なり、2 つの NULL 値を比較すると NULL が返されるということです。

注記

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

構文

isNotDistinctFrom(x, y)

引数

  • x — 最初の 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 フィールドは文字列型ですが、telegram フィールドは UInt32 なので、文字列に変換する必要があります。

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

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

両方の引数が等しい場合に 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)            │
└────────────────────────────┘