カテゴリ:

条件式関数

IFF

論理式がtrueと評価されるかfalseと評価されるかに応じて、2つの値のいずれかを返します。この関数は、シングルレベル if-then-else 式に似ています。 CASE と似ていますが、1つの条件のみを許可します。SQL ステートメントに条件ロジックを追加するために使用できます。

構文

IFF( <condition> , <expr1> , <expr2> )
Copy

引数

condition

条件は、 BOOLEAN 値(TRUE、 FALSE、または NULL)に評価される必要がある式です。

condition が TRUE に評価される場合、 expr1 を返します。それ以外の場合は expr2 を返します。

expr1

一般的な式です。この値は、 condition が真の場合に返されます。

expr2

一般的な式です。この値は、 condition が真でない場合(偽または NULLの場合)に返されます。

戻り値

この関数は VARCHAR データ型の値を返します。

使用上の注意

  • condition には、 UNION、 INTERSECT、 EXCEPT、 MINUS などの集合演算子を含む SELECT ステートメントを含めることができます。セット演算子を使用する場合は、データ型に互換性があることを確認してください。詳細については、 演算子のセット トピックの 一般的な使用上の注意 をご参照ください。

照合順序の詳細

関数から返される値は、 expr1expr2 引数の最上位 優先度 照合順序の照合順序仕様を保持します。

以下の例では、 IFF 関数を使用しています。

条件がtrueと評価されたため、 expr1 を返します。

SELECT IFF(TRUE, 'true', 'false');
Copy
+----------------------------+
| IFF(TRUE, 'TRUE', 'FALSE') |
|----------------------------|
| true                       |
+----------------------------+

条件がfalseと評価されたため、 expr2 を返します。

SELECT IFF(FALSE, 'true', 'false');
Copy
+-----------------------------+
| IFF(FALSE, 'TRUE', 'FALSE') |
|-----------------------------|
| false                       |
+-----------------------------+

条件が NULL と評価されるため、 expr2 を返します。

SELECT IFF(NULL, 'true', 'false');
Copy
+----------------------------+
| IFF(NULL, 'TRUE', 'FALSE') |
|----------------------------|
| false                      |
+----------------------------+

値が整数なら expr1integer)を返し、整数でなければ expr2non-integer)を返します。

SELECT value, IFF(value::INT = value, 'integer', 'non-integer')
  FROM ( SELECT column1 AS value
           FROM VALUES(1.0), (1.1), (-3.1415), (-5.000), (NULL) )
  ORDER BY value DESC;
Copy
+---------+---------------------------------------------------+
|   VALUE | IFF(VALUE::INT = VALUE, 'INTEGER', 'NON-INTEGER') |
|---------+---------------------------------------------------|
|    NULL | non-integer                                       |
|  1.1000 | non-integer                                       |
|  1.0000 | integer                                           |
| -3.1415 | non-integer                                       |
| -5.0000 | integer                                           |
+---------+---------------------------------------------------+

値が50より大きい場合は expr1High)を返し、値が50以下の場合は expr2Low)(または NULL)を返します。

SELECT value, IFF(value > 50, 'High', 'Low')
FROM ( SELECT column1 AS value
         FROM VALUES(22), (63), (5), (99), (NULL) );
Copy
+-------+--------------------------------+
| VALUE | IFF(VALUE > 50, 'HIGH', 'LOW') |
|-------+--------------------------------|
|    22 | Low                            |
|    63 | High                           |
|     5 | Low                            |
|    99 | High                           |
|  NULL | Low                            |
+-------+--------------------------------+