Expressões condicionais CASE, COALESCE e NULLIF
Esta seção descreve as expressões condicionais em conformidade com o SQL disponíveis no PostgreSQL.
CASE
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 usada em qualquer lugar onde uma expressão for válida. A condição é uma expressão que retorna um resultado boolean. Se o resultado for verdade, então o valor da expressão CASE é o resultado que segue a condição. Se o resultado for falso, todas as cláusulas WHEN seguintes são analisadas da mesma maneira. Se o resultado de 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.
Exemplo:
Resultado:
Agora uma consulta usando CASE.
Resultado:
Os tipos de dados de todas os resultados das expressões devem ser conversíveis em um único tipo de dado de saída.
A expressão CASE "simplificada", mostrada abaixo, é uma variante especializada da forma geral mostrada acima.
A expressão é computada e comparada com todas as especificações de valor nas cláusulas WHEN, até encontrar um que seja igual. Se não for encontrado nenhum valor igual, é retornado o resultado na cláusula ELSE (ou o valor nulo). Esta forma é semelhante à declaração switch da linguagem C.
O exemplo mostrado acima pode ser escrito utilizando a sintaxe simplificada da expressão CASE:
Resultado:
A expressão CASE não processa nenhuma subexpressão que não seja necessária para determinar o resultado. Por exemplo, esta é uma forma possível de evitar o erro gerado pela divisão por zero:
COALESCE
A função COALESCE retorna o primeiro de seus argumentos que não for nulo. Só retorna nulo quando todos os seus argumentos são nulos. Geralmente é útil para substituir o valor padrão quando este é o valor nulo, quando os dados são usados para exibição. Por exemplo:
Como a expressão CASE, a função COALESCE não processa os argumentos que não são necessários para determinar o resultado, ou seja, os argumentos à direita do primeiro argumento que não for nulo não são avaliados.
NULLIF
A função NULLIF retorna o valor nulo se, e somente se, valor1 e valor2 forem iguais. Senão, retorna valor1. Pode ser utilizada para realizar a operação inversa do exemplo para COALESCE mostrado acima:
CASE
A expressão CASE do SQL é uma expressão condicional genérica, semelhante às declarações if/else de outras linguagens.
CASE WHEN condição THEN resultado [WHEN ...] [ELSE resultado] END
A cláusula CASE pode ser usada em qualquer lugar onde uma expressão for válida. A condição é uma expressão que retorna um resultado boolean. Se o resultado for verdade, então o valor da expressão CASE é o resultado que segue a condição. Se o resultado for falso, todas as cláusulas WHEN seguintes são analisadas da mesma maneira. Se o resultado de 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.
Exemplo:
SELECT * FROM tabela;
Resultado:
a --- 1 2 3 (3 registros)
Agora uma consulta usando CASE.
SELECT a, CASE WHEN a = 1 THEN 'um' WHEN a = 2 THEN 'dois' ELSE 'outro' END AS caso FROM tabela;
Resultado:
a | caso ---+------- 1 | um 2 | dois 3 | outro (3 registros)
Os tipos de dados de todas os resultados das expressões devem ser conversíveis em um único tipo de dado de saída.
A expressão CASE "simplificada", mostrada abaixo, é uma variante especializada da forma geral mostrada acima.
CASE expressão WHEN valor THEN resultado [WHEN ...] [ELSE resultado] END
A expressão é computada e comparada com todas as especificações de valor nas cláusulas WHEN, até encontrar um que seja igual. Se não for encontrado nenhum valor igual, é retornado o resultado na cláusula ELSE (ou o valor nulo). Esta forma é semelhante à declaração switch da linguagem C.
O exemplo mostrado acima pode ser escrito utilizando a sintaxe simplificada da expressão CASE:
SELECT a, CASE a WHEN 1 THEN 'um' WHEN 2 THEN 'dois' ELSE 'outro' END AS caso FROM tabela;
Resultado:
a | caso ---+------- 1 | um 2 | dois 3 | outro (3 registros)
A expressão CASE não processa nenhuma subexpressão que não seja necessária para determinar o resultado. Por exemplo, esta é uma forma possível de evitar o erro gerado pela divisão por zero:
SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;
COALESCE
COALESCE(valor [, ...])
A função COALESCE retorna o primeiro de seus argumentos que não for nulo. Só retorna nulo quando todos os seus argumentos são nulos. Geralmente é útil para substituir o valor padrão quando este é o valor nulo, quando os dados são usados para exibição. Por exemplo:
SELECT coalesce(descrição, descrição_curta, '(nenhuma)') ...
Como a expressão CASE, a função COALESCE não processa os argumentos que não são necessários para determinar o resultado, ou seja, os argumentos à direita do primeiro argumento que não for nulo não são avaliados.
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 utilizada para realizar a operação inversa do exemplo para COALESCE mostrado acima:
SELECT nullif(valor, '(nenhuma)') ...
Comentários
Postar um comentário