6.12. Expressões condicionais

Esta seção descreve as expressões condicionais em conformidade com o SQL disponíveis no PostgreSQL.

Dica: Havendo alguma necessidade não atendida pelas funcionalidades destas expressões condicionais, deve ser considerado o desenvolvimento de um procedimento armazenado usando uma linguagem de programação com mais recursos.

6.12.1. CASE

CASE WHEN condição THEN resultado
     [WHEN ...]
     [ELSE resultado]
END

A expressão CASE do SQL é uma expressão condicional genérica, semelhante às declarações if/else de outras linguagens. A cláusula CASE pode ser empregada sempre que a utilização de uma expressão for válida. A condição é uma expressão que retorna um resultado booleano. Se a condição for verdade, então o valor da expressão CASE é o resultado. Se a condição for falsa, todas as cláusulas WHEN seguintes são percorridas da mesma maneira. Se nenhuma condição WHEN for verdade, então o valor da expressão CASE é o valor do resultado na cláusula ELSE. Se a cláusula ELSE for omitida, e nenhuma condição for satisfeita, o resultado será nulo.

Um exemplo:

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

=> SELECT a,
          CASE WHEN a=1 THEN 'um'
               WHEN a=2 THEN 'dois'
               ELSE 'outro'
          END
    FROM teste;
 a | case
---+-------
 1 | um
 2 | dois
 3 | outro

Os tipos de dado de todas as expressões para resultado devem poder ser convertidos no mesmo tipo de dado de saída. Veja a Seção 7.5 para obter mais detalhes.

CASE expressão
    WHEN valor THEN resultado
    [WHEN ...]
    [ELSE resultado]
END

Esta expressão CASE "simplificada" é uma variante especializada da forma geral mostrada acima. A expressão é calculada e comparada com todos os valores das cláusulas WHEN, até ser encontrado um igual. Se nenhum valor igual for encontrado, o resultado na cláusula ELSE (ou o valor nulo) é retornado. Esta forma é semelhante à declaração switch da linguagem C.

O exemplo mostrado anteriormente pode ser escrito utilizando a sintaxe simplificada do CASE:

=> SELECT a,
          CASE a WHEN 1 THEN 'um'
                 WHEN 2 THEN 'dois'
                 ELSE 'outro'
          END
    FROM teste;
 a | case
---+-------
 1 | um
 2 | dois
 3 | outro

6.12.2. COALESCE

COALESCE(valor [, ...])

A função COALESCE retorna o primeiro de seus argumentos que não for nulo. Geralmente é útil para substituir o valor padrão dos valores nulos quando os dados são usados para exibição. Por exemplo:

SELECT COALESCE(descricao, descricao_curta, '(nenhuma)') ...

6.12.3. NULLIF

NULLIF(valor1, valor2)

A função NULLIF retorna o valor nulo se, e somente se, valor1 e valor2 forem iguais. Senão, retorna valor1. Pode ser utilizado para realizar a operação inversa do exemplo para COALESCE mostrado acima:

SELECT NULLIF(valor, '(nenhuma)') ...

Dica: Tanto o COALESCE como o NULLIF são apenas formas abreviadas das expressões CASE. Na realidade, são convertidos em expressões CASE em um estágio bem inicial do processamento, fazendo o processamento subseqüente supor que está lidando com o CASE. Por isso, a utilização incorreta do COALESCE ou do NULLIF pode produzir uma mensagem de erro fazendo referência ao CASE.