Sintaxe de expressão de caso SQL?




sql-server oracle (5)

A sintaxe completa depende do mecanismo de banco de dados com o qual você está trabalhando:

Para o SQL Server:

CASE case-expression
    WHEN when-expression-1 THEN value-1
  [ WHEN when-expression-n THEN value-n ... ]
  [ ELSE else-value ]
END

ou:

CASE
    WHEN boolean-when-expression-1 THEN value-1
  [ WHEN boolean-when-expression-n THEN value-n ... ]
  [ ELSE else-value ]
END

expressões, etc:

case-expression    - something that produces a value
when-expression-x  - something that is compared against the case-expression
value-1            - the result of the CASE statement if:
                         the when-expression == case-expression
                      OR the boolean-when-expression == TRUE
boolean-when-exp.. - something that produces a TRUE/FALSE answer

Link: CASE (Transact-SQL)

Observe também que a ordem das instruções WHEN é importante. Você pode escrever facilmente várias cláusulas WHEN que se sobrepõem, e a primeira que corresponde é usada .

Nota : Se nenhuma cláusula ELSE for especificada e nenhuma condição WHEN correspondente for encontrada, o valor da expressão CASE será NULL .

Qual é a sintaxe completa e correta para a expressão SQL Case?


Aqui estão os exemplos de instruções CASE documentos do PostgreSQL (o Postgres segue o padrão SQL aqui):

SELECT a,
   CASE WHEN a=1 THEN 'one'
        WHEN a=2 THEN 'two'
        ELSE 'other'
   END
FROM test;

ou

SELECT a,
   CASE a WHEN 1 THEN 'one'
          WHEN 2 THEN 'two'
          ELSE 'other'
   END
FROM test;

Obviamente, o segundo formulário é mais limpo quando você está apenas verificando um campo em uma lista de valores possíveis. A primeira forma permite expressões mais complicadas.



Sintaxe de instrução de caso no SQL SERVER:

CASE column
   WHEN value1 THEN 1
   WHEN value3 THEN 2
   WHEN value3 THEN 3
   WHEN value1 THEN 4
   ELSE ''
END

E podemos usar como abaixo também:

CASE 
   WHEN column=value1 THEN 1
   WHEN column=value3 THEN 2
   WHEN column=value3 THEN 3
   WHEN column=value1 THEN 4
   ELSE ''
END

Sintaxe Oracle da documentação 11g :

CASE { simple_case_expression | searched_case_expression }
     [ else_clause ]
     END

simple_case_expression

expr { WHEN comparison_expr THEN return_expr }...

search_case_expression

{ WHEN condition THEN return_expr }...

else_clause

ELSE else_expr






case