Conditional expressions

GoogleSQL for BigQuery supports conditional expressions. Conditional expressions impose constraints on the evaluation order of their inputs. In essence, they are evaluated left to right, with short-circuiting, and only evaluate the output value that was chosen. In contrast, all inputs to regular functions are evaluated before calling the function. Short-circuiting in conditional expressions can be exploited for error handling or performance tuning.

Expression list

Name Summary
CASE expr Compares the given expression to each successive WHEN clause and produces the first result where the values are equal.
CASE Evaluates the condition of each successive WHEN clause and produces the first result where the condition evaluates to TRUE .
COALESCE Produces the value of the first non- NULL expression, if any, otherwise NULL .
IF If an expression evaluates to TRUE , produces a specified result, otherwise produces the evaluation for an else result .
IFNULL If an expression evaluates to NULL , produces a specified result, otherwise produces the expression.
NULLIF Produces NULL if the first expression that matches another evaluates to TRUE , otherwise returns the first expression.

CASE expr

  CASE 
  
 expr 
  
 WHEN 
  
 expr_to_match 
  
 THEN 
  
 result 
  
 [ 
  
 ... 
  
 ] 
  
 [ 
  
 ELSE 
  
 else_result 
  
 ] 
  
 END 
 

Description

Compares expr to expr_to_match of each successive WHEN clause and returns the first result where this comparison evaluates to TRUE . The remaining WHEN clauses and else_result aren't evaluated.

If the expr = expr_to_match comparison evaluates to FALSE or NULL for all WHEN clauses, returns the evaluation of else_result if present; if else_result isn't present, then returns NULL .

Consistent with equality comparisons elsewhere, if both expr and expr_to_match are NULL , then expr = expr_to_match evaluates to NULL , which returns else_result . If a CASE statement needs to distinguish a NULL value, then the alternate CASE syntax should be used.

expr and expr_to_match can be any type. They must be implicitly coercible to a common supertype ; equality comparisons are done on coerced values. There may be multiple result types. result and else_result expressions must be coercible to a common supertype.

This expression supports specifying collation .

Return Data Type

Supertype of result [, ...] and else_result .

Example

  WITH 
  
 Numbers 
  
 AS 
  
 ( 
  
 SELECT 
  
 90 
  
 as 
  
 A 
 , 
  
 2 
  
 as 
  
 B 
  
 UNION 
  
 ALL 
  
 SELECT 
  
 50 
 , 
  
 8 
  
 UNION 
  
 ALL 
  
 SELECT 
  
 60 
 , 
  
 6 
  
 UNION 
  
 ALL 
  
 SELECT 
  
 50 
 , 
  
 10 
 ) 
 SELECT 
  
 A 
 , 
  
 B 
 , 
  
 CASE 
  
 A 
  
 WHEN 
  
 90 
  
 THEN 
  
 'red' 
  
 WHEN 
  
 50 
  
 THEN 
  
 'blue' 
  
 ELSE 
  
 'green' 
  
 END 
  
 AS 
  
 result 
 FROM 
  
 Numbers 
 /*------------------* 
 | A  | B  | result | 
 +------------------+ 
 | 90 | 2  | red    | 
 | 50 | 8  | blue   | 
 | 60 | 6  | green  | 
 | 50 | 10 | blue   | 
 *------------------*/ 
 

CASE

  CASE 
  
 WHEN 
  
 condition 
  
 THEN 
  
 result 
  
 [ 
  
 ... 
  
 ] 
  
 [ 
  
 ELSE 
  
 else_result 
  
 ] 
  
 END 
 

Description

Evaluates the condition of each successive WHEN clause and returns the first result where the condition evaluates to TRUE ; any remaining WHEN clauses and else_result aren't evaluated.

If all conditions evaluate to FALSE or NULL , returns evaluation of else_result if present; if else_result isn't present, then returns NULL .

For additional rules on how values are evaluated, see the three-valued logic table in Logical operators .

condition must be a boolean expression. There may be multiple result types. result and else_result expressions must be implicitly coercible to a common supertype .

This expression supports specifying collation .

Return Data Type

Supertype of result [, ...] and else_result .

Example

  WITH 
  
 Numbers 
  
 AS 
  
 ( 
  
 SELECT 
  
 90 
  
 as 
  
 A 
 , 
  
 2 
  
 as 
  
 B 
  
 UNION 
  
 ALL 
  
 SELECT 
  
 50 
 , 
  
 6 
  
 UNION 
  
 ALL 
  
 SELECT 
  
 20 
 , 
  
 10 
 ) 
 SELECT 
  
 A 
 , 
  
 B 
 , 
  
 CASE 
  
 WHEN 
  
 A 
 > 
 60 
  
 THEN 
  
 'red' 
  
 WHEN 
  
 B 
  
 = 
  
 6 
  
 THEN 
  
 'blue' 
  
 ELSE 
  
 'green' 
  
 END 
  
 AS 
  
 result 
 FROM 
  
 Numbers 
 /*------------------* 
 | A  | B  | result | 
 +------------------+ 
 | 90 | 2  | red    | 
 | 50 | 6  | blue   | 
 | 20 | 10 | green  | 
 *------------------*/ 
 

COALESCE

  COALESCE 
 ( 
 expr 
 [ 
 , 
  
 ... 
 ] 
 ) 
 

Description

Returns the value of the first non- NULL expression, if any, otherwise NULL . The remaining expressions aren't evaluated. An input expression can be any type. There may be multiple input expression types. All input expressions must be implicitly coercible to a common supertype .

Return Data Type

Supertype of expr [, ...].

Examples

  SELECT 
  
 COALESCE 
 ( 
 'A' 
 , 
  
 'B' 
 , 
  
 'C' 
 ) 
  
 as 
  
 result 
 /*--------* 
 | result | 
 +--------+ 
 | A      | 
 *--------*/ 
 
  SELECT 
  
 COALESCE 
 ( 
 NULL 
 , 
  
 'B' 
 , 
  
 'C' 
 ) 
  
 as 
  
 result 
 /*--------* 
 | result | 
 +--------+ 
 | B      | 
 *--------*/ 
 

IF

  IF 
 ( 
 expr 
 , 
  
 true_result 
 , 
  
 else_result 
 ) 
 

Description

If expr evaluates to TRUE , returns true_result , else returns the evaluation for else_result . else_result isn't evaluated if expr evaluates to TRUE . true_result isn't evaluated if expr evaluates to FALSE or NULL .

expr must be a boolean expression. true_result and else_result must be coercible to a common supertype .

Return Data Type

Supertype of true_result and else_result .

Examples

  SELECT 
  
 10 
  
 AS 
  
 A 
 , 
  
 20 
  
 AS 
  
 B 
 , 
  
 IF 
 ( 
 10 
 < 
 20 
 , 
  
 'true' 
 , 
  
 'false' 
 ) 
  
 AS 
  
 result 
 /*------------------* 
 | A  | B  | result | 
 +------------------+ 
 | 10 | 20 | true   | 
 *------------------*/ 
 
  SELECT 
  
 30 
  
 AS 
  
 A 
 , 
  
 20 
  
 AS 
  
 B 
 , 
  
 IF 
 ( 
 30 
 < 
 20 
 , 
  
 'true' 
 , 
  
 'false' 
 ) 
  
 AS 
  
 result 
 /*------------------* 
 | A  | B  | result | 
 +------------------+ 
 | 30 | 20 | false  | 
 *------------------*/ 
 

IFNULL

  IFNULL 
 ( 
 expr 
 , 
  
 null_result 
 ) 
 

Description

If expr evaluates to NULL , returns null_result . Otherwise, returns expr . If expr doesn't evaluate to NULL , null_result isn't evaluated.

expr and null_result can be any type and must be implicitly coercible to a common supertype . Synonym for COALESCE(expr, null_result) .

Return Data Type

Supertype of expr or null_result .

Examples

  SELECT 
  
 IFNULL 
 ( 
 NULL 
 , 
  
 0 
 ) 
  
 as 
  
 result 
 /*--------* 
 | result | 
 +--------+ 
 | 0      | 
 *--------*/ 
 
  SELECT 
  
 IFNULL 
 ( 
 10 
 , 
  
 0 
 ) 
  
 as 
  
 result 
 /*--------* 
 | result | 
 +--------+ 
 | 10     | 
 *--------*/ 
 

NULLIF

  NULLIF 
 ( 
 expr 
 , 
  
 expr_to_match 
 ) 
 

Description

Returns NULL if expr = expr_to_match evaluates to TRUE , otherwise returns expr .

expr and expr_to_match must be implicitly coercible to a common supertype , and must be comparable.

This expression supports specifying collation .

Return Data Type

Supertype of expr and expr_to_match .

Example

  SELECT 
  
 NULLIF 
 ( 
 0 
 , 
  
 0 
 ) 
  
 as 
  
 result 
 /*--------* 
 | result | 
 +--------+ 
 | NULL   | 
 *--------*/ 
 
  SELECT 
  
 NULLIF 
 ( 
 10 
 , 
  
 0 
 ) 
  
 as 
  
 result 
 /*--------* 
 | result | 
 +--------+ 
 | 10     | 
 *--------*/ 
 
Design a Mobile Site
View Site in Mobile | Classic
Share by: