9.17.1. CASE

A expressão SQL CASE é uma expressão condicional genérica, semelhante às instruções if/else em outras linguagens de programação:

CASE WHEN condition THEN result END

As cláusulas CASE podem ser usadas onde quer que uma expressão seja válida. Cada condição é uma expressão que retorna um resultado booleano. Se o resultado da condição for verdadeiro, o valor da expressão CASE é o resultado que segue a condição, e o restante da expressão CASE não é processado. Se o resultado da condição não for verdadeiro, qualquer cláusula subseqüente QUANDO for examinada da mesma forma. Se nenhuma condição QUANDO a condição não for verdadeira, o valor da expressão CASE é o resultado da cláusula ELSE. Se a cláusula ELSE for omitida e nenhuma condição for verdadeira, o resultado é nulo.

Um exemplo:

SELECT * FROM test; a--- 1 2 3SELECT 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

Os tipos de dados de todas as expressões de resultados devem ser conversíveis para um único tipo de saída. Veja Seção 10.5 para mais detalhes.

Existe uma forma “simples” de expressão CASE que é uma variante da forma geral acima:

CASE expression WHEN value THEN result END

A primeira expressão é computada, então comparada com cada uma das expressões de valor nas cláusulas QUANDO for encontrada uma que seja igual a ela. Se não for encontrada nenhuma correspondência, o resultado da cláusula ELSE (ou um valor nulo) é retornado. Isto é similar à expressão switch em C.

O exemplo acima pode ser escrito usando a sintaxe simples CASE:

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

Uma expressão CASE não avalia nenhuma subexpressão que não seja necessária para determinar o resultado. Por exemplo, esta é uma maneira possível de evitar uma falha divisão por zero:

SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;

Note: Como descrito na Secção 4.2.14, existem várias situações em que as subexpressões de uma expressão são avaliadas em momentos diferentes, de modo que o princípio de que “CASE avalia apenas as subexpressões necessárias” não é ironclad. Por exemplo, uma subexpressão constante 1/0 normalmente resultará em uma falha divisão por zero no tempo de planejamento, mesmo que esteja dentro de um braço CASE que nunca seria inserido no tempo de execução.

Deixe uma resposta

O seu endereço de email não será publicado.