制御フロー関数

TiDB は、MySQL 8.0 で利用可能な制御フロー関数のすべてをサポートします。

名前説明
CASEケース演算子
IF()If/else構文
IFNULL()null if/else 構文
NULLIF()expr1 = expr2の場合はNULL返す

場合

CASE演算子を使用すると、条件付きロジックを実行し、指定された条件に基づいてクエリ結果をカスタマイズできます。

構文:

CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END

例:

WITH RECURSIVE d AS (SELECT 1 AS n UNION ALL SELECT n+1 FROM d WHERE n<10) SELECT n, CASE WHEN n MOD 2 THEN "odd" ELSE "even" END FROM d;
+----+----------------------------------------------+ | n | CASE WHEN n MOD 2 THEN "odd" ELSE "even" END | +----+----------------------------------------------+ | 1 | odd | | 2 | even | | 3 | odd | | 4 | even | | 5 | odd | | 6 | even | | 7 | odd | | 8 | even | | 9 | odd | | 10 | even | +----+----------------------------------------------+ 10 rows in set (0.00 sec)

もし()

IF()関数を使用すると、値または式が真であるかどうかに基づいてさまざまなアクションを実行できます。

構文:

IF(condition, value_if_true, value_if_false)

例:

WITH RECURSIVE d AS (SELECT 1 AS n UNION ALL SELECT n+1 FROM d WHERE n<10) SELECT n, IF(n MOD 2, "odd", "even") FROM d;
+----+----------------------------+ | n | IF(n MOD 2, "odd", "even") | +----+----------------------------+ | 1 | odd | | 2 | even | | 3 | odd | | 4 | even | | 5 | odd | | 6 | even | | 7 | odd | | 8 | even | | 9 | odd | | 10 | even | +----+----------------------------+ 10 rows in set (0.00 sec)

IFNULL()

IFNULL(expr1,expr2)関数は、クエリ内の NULL 値を処理するために使用されます。 expr1NULLでない場合はexpr1を返し、それ以外の場合はexpr2返します。

例:

WITH data AS (SELECT NULL AS x UNION ALL SELECT 1 ) SELECT x, IFNULL(x,'x has no value') FROM data;
+------+----------------------------+ | x | IFNULL(x,'x has no value') | +------+----------------------------+ | NULL | x has no value | | 1 | 1 | +------+----------------------------+ 2 rows in set (0.0006 sec)

NULLIF()

NULLIF(expr1,expr2)関数は、両方の引数が同じか、最初の引数がNULLの場合にNULLを返します。それ以外の場合は、最初の引数を返します。

例:

WITH RECURSIVE d AS (SELECT 1 AS n UNION ALL SELECT n+1 FROM d WHERE n<10) SELECT n, NULLIF(n+n, n+2) FROM d;
+----+------------------+ | n | NULLIF(n+n, n+2) | +----+------------------+ | 1 | 2 | | 2 | NULL | | 3 | 6 | | 4 | 8 | | 5 | 10 | | 6 | 12 | | 7 | 14 | | 8 | 16 | | 9 | 18 | | 10 | 20 | +----+------------------+ 10 rows in set (0.00 sec)

この例では、 n 2に等しい場合、 n+nn+2両方とも4等しくなり、両方の引数が同じになり、関数はNULLを返します。

このページは役に立ちましたか?