Firebird Documentation Index → Firebird 2.1 Language Ref. Update → Miscellaneous language elements → CASE construct |
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:
The simple CASE, comparable to a Pascal case
or a C switch
.
The searched CASE, which works like a series of “if ... else if ... else if
” clauses.
Syntax:
CASE<test-expr>
WHEN<expr>
THENresult
[WHEN<expr>
THENresult
...] [ELSEdefaultresult
] END
When this variant is used, <test-expr>
is compared to <expr>
1, <expr>
2 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 <test-expr>
is NULL
, it won't match any of the <expr>
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.
A shorthand form of the simple CASE construct is the DECODE() function, available since Firebird 2.1.
Example:
select name, age, case upper(sex) when 'M' then 'Male' when 'F' then 'Female' else 'Unknown' end, religion from people
Syntax:
CASE WHEN<bool_expr>
THENresult
[WHEN<bool_expr>
THENresult
...] [ELSEdefaultresult
] END
Here, the <bool_expr>
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;
Firebird Documentation Index → Firebird 2.1 Language Ref. Update → Miscellaneous language elements → CASE construct |