Firebird Documentation IndexFirebird 2.0 Language Ref. UpdateMiscellaneous language elements → CASE construct
Firebird Home Firebird Home Prev: Shorthand castsFirebird Documentation IndexUp: Miscellaneous language elementsNext: Data types and subtypes

CASE construct

Table of Contents

Simple CASE
Searched CASE

Tip

Find a more recent version at Firebird 5.0 Language Reference: CASE

Available in: DSQL, PSQL

Added in: 1.5

Description: A CASE construct returns exactly one value from a number of possibilities. There are two syntactic variants:

Simple CASE

Syntax: 

CASE <expression>
   WHEN <exp1> THEN result1
   WHEN <exp2> THEN result2
   ...
   [ELSE defaultresult]
END

When this variant is used, <expression> is compared to <exp1>, <exp2> etc., until a match is found, upon which the corresponding result is returned. If there is no match and there is an ELSE clause, defaultresult is returned. If there is no match and no ELSE clause, NULL is returned.

The match is determined with the = operator, so if <expression> is NULL, it won't match any of the <expN>s, not even those that are NULL.

The results don't have to be literal values: they may also be field or variable names, compound expressions, or NULL literals.

Example: 

select name,
       age,
       case upper(sex)
         when 'M' then 'Male'
         when 'F' then 'Female'
         else 'Unknown'
       end,
       religion
from people

Searched CASE

Syntax: 

CASE
   WHEN <bool_exp1> THEN result1
   WHEN <bool_exp2> THEN result2
   ...
   [ELSE defaultresult]
END

Here, the <bool_expN>s are tests that give a ternary boolean result: true, false, or NULL. The first expression evaluating to TRUE determines the result. If no expression is TRUE and there is an ELSE clause, defaultresult is returned. If no expression is TRUE and there is no ELSE clause, NULL is returned.

As with the simple CASE, the results don't have to be literal values: they may also be field or variable names, compound expressions, or NULL literals.

Example: 

CanVote = case
            when Age >= 18 then 'Yes'
            when Age <  18 then 'No'
            else 'Unsure'
          end;
Prev: Shorthand castsFirebird Documentation IndexUp: Miscellaneous language elementsNext: Data types and subtypes
Firebird Documentation IndexFirebird 2.0 Language Ref. UpdateMiscellaneous language elements → CASE construct