9.0 KiB
slug | sidebar_position | sidebar_label |
---|---|---|
/ja/sql-reference/functions/functions-for-nulls | 135 | Nullable |
Nullable 値を扱う関数
isNull
引数が NULL かどうかを返します。
演算子 IS NULL
も参照してください。
構文
isNull(x)
別名: ISNULL
.
引数
x
— 非複合データ型の値。
返される値
x
がNULL
の場合は1
。x
がNULL
でない場合は0
。
例
テーブル:
┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 2 │ 3 │
└───┴──────┘
クエリ:
SELECT x FROM t_null WHERE isNull(y);
結果:
┌─x─┐
│ 1 │
└───┘
isNullable
カラムが Nullable かどうかを返します。Nullable は NULL
値を許可することを意味します。
構文
isNullable(x)
引数
x
— カラム。
返される値
例
クエリ:
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
— 非複合データ型の値。
返される値
x
がNULL
でない場合は1
。x
がNULL
の場合は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 キー。
返される値
x
とy
が両方とも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 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │
└──────────┴──────┴───────────┴───────────┘
mail
と phone
フィールドは 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)
引数:
x
—NULL
かどうかを確認する値。alt
—x
がNULL
である場合に関数が返す値。
返される値
x
がNULL
でない場合、x
。x
がNULL
の場合、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) │
└────────────────────────────┘