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.
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
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)') ...
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 oNULLIF
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 doCOALESCE
ou doNULLIF
pode produzir uma mensagem de erro fazendo referência ao CASE.