Conditional Expressions

PostgreSQL 7.2 Documentation
Prev | Chapter 4. Functions and Operators | Next

# 4.12. Conditional Expressions

This section describes the SQL-compliant conditional expressions available in PostgreSQL.

> Tip: If your needs go beyond the capabilities of these conditional expressions you might want to consider writing a stored procedure in a more expressive programming language.

### CASE

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

The SQL CASE expression is a generic conditional expression, similar to if/else statements in other languages. CASE clauses can be used wherever an expression is valid. `condition` is an expression that returns a `boolean` result. If the result is true then the value of the CASE expression is `result`. If the result is false any subsequent WHEN clauses are searched in the same manner. If no WHEN `condition` is true then the value of the case expression is the `result` in the ELSE clause. If the ELSE clause is omitted and no condition matches, the result is NULL.

An example:

    => SELECT * FROM test;
     a
    ---
     1
     2
     3

    => SELECT a,
              CASE WHEN a=1 THEN 'one'
                   WHEN a=2 THEN 'two'
                   ELSE 'other'
              END
        FROM test;
     a | case
    ---+-------
     1 | one
     2 | two
     3 | other

The data types of all the `result` expressions must be coercible to a single output type. See Section 5.6 for more detail.

    CASE expression
        WHEN value THEN result
        [WHEN ...]
        [ELSE result]
    END

This "simple" CASE expression is a specialized variant of the general form above. The `expression` is computed and compared to all the `value`s in the WHEN clauses until one is found that is equal. If no match is found, the `result` in the ELSE clause (or NULL) is returned. This is similar to the `switch` statement in C.

The example above can be written using the simple CASE syntax:

    => SELECT a,
              CASE a WHEN 1 THEN 'one'
                     WHEN 2 THEN 'two'
                     ELSE 'other'
              END
        FROM test;
     a | case
    ---+-------
     1 | one
     2 | two
     3 | other

### COALESCE

    COALESCE(value[, ...])

The `COALESCE` function returns the first of its arguments that is not NULL. This is often useful to substitute a default value for NULL values when data is retrieved for display, for example:

    SELECT COALESCE(description, short_description, '(none)') ...

### NULLIF

    NULLIF(value1, value2)

The `NULLIF` function returns NULL if and only if `value1` and `value2` are equal. Otherwise it returns `value1`. This can be used to perform the inverse operation of the `COALESCE` example given above:

    SELECT NULLIF(value, '(none)') ...

> Tip: `COALESCE` and `NULLIF` are just shorthand for CASE expressions. They are actually converted into CASE expressions at a very early stage of processing, and subsequent processing thinks it is dealing with CASE. Thus an incorrect `COALESCE` or `NULLIF` usage may draw an error message that refers to CASE.

Prev | Home | Next
Sequence-Manipulation Functions | Up | Miscellaneous Functions