- 类别:
IFF¶
根据布尔表达式的计算结果是 Ture 还是 False,返回两个值中的一个。此函数类似于单级 if-then-else
表达式。它类似于 CASE,但只允许一个条件。您可以使用它向 SQL 语句添加条件逻辑。
语法¶
IFF( <condition> , <expr1> , <expr2> )
实参¶
condition
该条件是一个应计算为 BOOLEAN 值(TRUE、FALSE 或 NULL)的表达式。
如果
condition
计算结果为 TRUE,则返回expr1
,否则返回expr2
。expr1
通用表达式。如果
condition
为 True,则该函数返回此值。expr2
通用表达式。如果
condition
不为 True(即,如果它为 False 或 NULL),则该函数返回此值。
返回¶
该函数可以返回任何类型的值。如果返回的表达式的值为 NULL,则该函数可以返回 NULL。
使用说明¶
condition
可以包含一个 SELECT 语句,该语句包含集合运算符,例如 UNION、INTERSECT 和 EXCEPT (MINUS)。使用集合运算符时,请确保数据类型兼容。有关详细信息,请参阅 集运算符 主题中的 一般使用说明。
排序规则详细信息¶
从该函数返回的值会保留 expr1
和 expr2
实参的最高 优先级 排序规则的排序规则规范。
示例¶
以下示例使用 IFF
函数。
由于条件的计算结果为 Ture,故返回 expr1
:
SELECT IFF(TRUE, 'true', 'false');
+----------------------------+
| IFF(TRUE, 'TRUE', 'FALSE') |
|----------------------------|
| true |
+----------------------------+
由于条件的计算结果为 False,故返回 expr2
:
SELECT IFF(FALSE, 'true', 'false');
+-----------------------------+
| IFF(FALSE, 'TRUE', 'FALSE') |
|-----------------------------|
| false |
+-----------------------------+
由于条件的计算结果为 NULL,故返回 expr2
:
SELECT IFF(NULL, 'true', 'false');
+----------------------------+
| IFF(NULL, 'TRUE', 'FALSE') |
|----------------------------|
| false |
+----------------------------+
由于返回的表达式的值为 NULL,故返回 NULL:
SELECT IFF(TRUE, NULL, 'false');
+--------------------------+
| IFF(TRUE, NULL, 'FALSE') |
|--------------------------|
| NULL |
+--------------------------+
如果值是整数,则返回 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;
+---------+---------------------------------------------------+
| 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) );
+-------+--------------------------------+
| VALUE | IFF(VALUE > 50, 'HIGH', 'LOW') |
|-------+--------------------------------|
| 22 | Low |
| 63 | High |
| 5 | Low |
| 99 | High |
| NULL | Low |
+-------+--------------------------------+