SQL Caso Expression Syntax?

votos
59

Qual é o completo sintaxe e correto para a expressão SQL Case?

Publicado 07/08/2008 em 13:13
fonte usuário
Em outras línguas...                            


8 respostas

votos
75

A completa sintaxe depende do motor de banco de dados que você está trabalhando com:

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 ordenação dos quando as declarações é importante. Você pode facilmente escrever múltipla quando cláusulas que se sobrepõem, e o primeiro que corresponde é usado .

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

Respondeu 07/08/2008 em 13:20
fonte usuário

votos
21

Considerando marcadas vários produtos, eu diria que a plena sintaxe correta seria o encontrado na norma ISO / ANSI SQL-92:

<case expression> ::=
       <case abbreviation>
     | <case specification>

<case abbreviation> ::=
       NULLIF <left paren> <value expression> <comma>
              <value expression> <right paren>
     | COALESCE <left paren> <value expression>
                { <comma> <value expression> }... <right paren>

<case specification> ::=
       <simple case>
     | <searched case>

<simple case> ::=
     CASE <case operand>
          <simple when clause>...
        [ <else clause> ]
     END

<searched case> ::=
     CASE
       <searched when clause>...
     [ <else clause> ]
     END

<simple when clause> ::= WHEN <when operand> THEN <result>

<searched when clause> ::= WHEN <search condition> THEN <result>

<else clause> ::= ELSE <result>

<case operand> ::= <value expression>

<when operand> ::= <value expression>

<result> ::= <result expression> | NULL

<result expression> ::= <value expression>

Regras de sintaxe

1) NULLIF (V1, V2) is equivalent to the following <case specification>:

     CASE WHEN V1=V2 THEN NULL ELSE V1 END

2) COALESCE (V1, V2) is equivalent to the following <case specification>:

     CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END

3) COALESCE (V1, V2, . . . ,n ), for n >= 3, is equivalent to the
   following <case specification>:

     CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2, . . . ,n )
     END

4) If a <case specification> specifies a <simple case>, then let CO
   be the <case operand>:

   a) The data type of each <when operand> WO shall be comparable
      with the data type of the <case operand>.

   b) The <case specification> is equivalent to a <searched case>
      in which each <searched when clause> specifies a <search
      condition> of the form "CO=WO".

5) At least one <result> in a <case specification> shall specify a
   <result expression>.

6) If an <else clause> is not specified, then ELSE NULL is im-
   plicit.

7) The data type of a <case specification> is determined by ap-
   plying Subclause 9.3, "Set operation result data types", to the
   data types of all <result expression>s in the <case specifica-
   tion>.

Access Rules

   None.

General Rules

1) Case:

   a) If a <result> specifies NULL, then its value is the null
      value.

   b) If a <result> specifies a <value expression>, then its value
      is the value of that <value expression>.

2) Case:

   a) If the <search condition> of some <searched when clause> in
      a <case specification> is true, then the value of the <case
      specification> is the value of the <result> of the first
      (leftmost) <searched when clause> whose <search condition> is
      true, cast as the data type of the <case specification>.

   b) If no <search condition> in a <case specification> is true,
      then the value of the <case expression> is the value of the
      <result> of the explicit or implicit <else clause>, cast as
      the data type of the <case specification>.
Respondeu 22/10/2008 em 08:41
fonte usuário

votos
19

Aqui estão os CASEexemplos declaração do docs PostgreSQL (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, a segunda forma é mais limpo quando você está apenas verificando um campo com uma lista de possíveis valores. A primeira forma permite expressões mais complicadas.

Respondeu 07/08/2008 em 13:30
fonte usuário

votos
8

Sybase tem a mesma sintaxe caso como SQL Server:

Descrição

Suporta expressões SQL condicionais; pode ser usado em qualquer lugar uma expressão de valor pode ser usado.

Sintaxe

case 
     when search_condition then expression 
    [when search_condition then expression]...
    [else expression]
end

Caso e valores sintaxe

case expression
     when expression then expression 
    [when expression then expression]...
    [else expression]
end

parâmetros

caso

começa a expressão caso.

quando

precede a condição de pesquisa ou a expressão a ser comparadas.

search_condition

é usada para definir as condições para os resultados que são seleccionados. condições de pesquisa para expressões de caso são semelhantes às condições de pesquisa em uma cláusula WHERE. condições de pesquisa estão detalhadas no Manual do Utilizador de Transact-SQL.

então

precede a expressão que especifica um valor de resultado do caso.

expressão

é um nome da coluna, uma constante, uma função, um subconsulta, ou qualquer combinação dos nomes das colunas, constantes e funções ligadas por operadores aritméticos ou bit a bit. Para mais informações sobre expressões, consulte “Expressões” no.

Exemplo

select disaster, 
       case
            when disaster = "earthquake" 
                then "stand in doorway"
            when disaster = "nuclear apocalypse" 
                then "hide in basement"
            when monster = "zombie apocalypse" 
                then "hide with Chuck Norris"
            else
                then "ask mom"
       end 
  from endoftheworld
Respondeu 26/03/2009 em 20:05
fonte usuário

votos
4

Eu desenterrar a página do Oracle para o mesmo e parece que esta é a mesma sintaxe, acabamos de descrever um pouco diferente.

Link: Oracle / PLSQL: Declaração de Caso

Respondeu 07/08/2008 em 13:27
fonte usuário

votos
3

A Oracle sintaxe da Documentação 11g :

CASE { simple_case_expression | searched_case_expression }
     [ else_clause ]
     END

simple_case_expression

expr { WHEN comparison_expr THEN return_expr }...

searched_case_expression

{ WHEN condition THEN return_expr }...

else_clause

ELSE else_expr
Respondeu 21/10/2008 em 20:31
fonte usuário

votos
1

Um ponto a ser observado no caso da Oracle, se não quando partidas não há nenhuma parte outra uma exceção.

Respondeu 01/02/2009 em 08:19
fonte usuário

votos
-2

Caso sintaxe da instrução 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
Respondeu 28/01/2013 em 10:18
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more