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,
case upper(sex)
when 'M' then 'Male'
when 'F' then 'Female'
else 'Unknown'
religion
from people
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'