IFF

IFF

부울 표현식이 true인지 false인지에 따라 두 값 중 하나를 반환해요. 이 함수는 단일 레벨 if-then-else 표현식과 유사해요. CASE와 비슷하지만 단일 조건만 허용해요. SQL 문장에 조건부 논리를 추가하는 데 사용할 수 있어요.

출처: Snowflake IFF 함수 문서

본문

구문 (Syntax)

IFF(  ,  ,  )

인자 (Arguments)

  • condition — BOOLEAN 값(TRUE, FALSE 또는 NULL)으로 평가되어야 하는 표현식이에요. condition이 TRUE로 평가되면 expr1을, 그렇지 않으면 expr2를 반환해요.
  • expr1 — 일반 표현식이에요. condition이 true이면 이 값을 반환해요.
  • expr2 — 일반 표현식이에요. condition이 true가 아니면(즉 false 또는 NULL이면) 이 값을 반환해요.

반환 값 (Returns)

이 함수는 어떤 타입의 값도 반환할 수 있어요. 반환되는 표현식의 값이 NULL이면 함수는 NULL을 반환할 수 있어요.

사용 노트 (Usage Notes)

condition은 UNION, INTERSECT, EXCEPT (MINUS) 같은 집합 연산자를 포함하는 SELECT 문장을 포함할 수 있어요. 집합 연산자를 사용할 때는 데이터 타입이 호환되는지 확인하세요. 자세한 내용은 집합 연산자 주제의 일반 사용 노트를 참고해요.

정렬 규칙 세부사항 (Collation Details)

함수에서 반환된 값은 expr1과 expr2 인자의 최우선 순위 정렬 규칙(highest-precedence collation)의 정렬 규칙 지정을 유지해요.

예제 (Examples)

다음 예제들은 IFF 함수를 사용해요.

조건이 true로 평가되므로 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)이면 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                            |
+-------+--------------------------------+

더 알아보기