类别:

条件表达式函数

IFF

根据布尔表达式的计算结果是 Ture 还是 False,返回两个值中的一个。此函数类似于单级 if-then-else 表达式。它类似于 CASE,但只允许一个条件。您可以使用它向 SQL 语句添加条件逻辑。

语法

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

实参

condition

该条件是一个应计算为 BOOLEAN 值(TRUE、FALSE 或 NULL)的表达式。

如果 condition 计算结果为 TRUE,则返回 expr1,否则返回 expr2

expr1

通用表达式。如果 condition 为 true,则返回此值。

expr2

通用表达式。如果 condition 不为 true(即,如果它为 false 或 NULL),则返回此值。

返回

此函数返回 VARCHAR 数据类型的值。

使用说明

  • condition 可以包含一个 SELECT 语句,该语句包含集合运算符,例如 UNION、INTERSECT、EXCEPT 和 MINUS。使用集合运算符时,请确保数据类型兼容。有关详细信息,请参阅 一般使用说明 主题中的 集运算符

排序规则详细信息

从该函数返回的值会保留 expr1expr2 实参的最高 优先级 排序规则的排序规则规范。

示例

以下示例使用 IFF 函数。

由于条件的计算结果为 Ture,故返回 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                      |
+----------------------------+

如果值是整数,则返回 expr1 (integer);或如果值不是整数,则返回 expr2 (non-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,则返回 expr1 (High);或如果值小于等于 50(或为 NULL),则返回:samp:{expr2} (Low):

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                            |
+-------+--------------------------------+
语言: 中文