制御フロー関数
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 値を処理するために使用されます。3 expr1 NULLでない場合は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+nとn+2両方とも4等しくなり、両方の引数が同じになり、関数はNULL返します。