Pregunta

Cuál es el completo ¿Y la sintaxis correcta para la expresión SQL Case?

¿Fue útil?

Solución

El completo la sintaxis depende del motor de base de datos con el que esté trabajando:

Para servidor SQL:

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

o:

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

expresiones, 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

Enlace: CASO (Transact-SQL)

Tenga en cuenta también que el orden de las declaraciones CUANDO es importante.Puede escribir fácilmente varias cláusulas WHEN que se superpongan y se utiliza el primero que coincida.

Nota:Si no se especifica ninguna cláusula ELSE y no se encuentra ninguna condición WHEN coincidente, el valor de la expresión CASE será NULO.

Otros consejos

Teniendo en cuenta que etiquetó varios productos, diría que el lleno la sintaxis correcta sería la que se encuentra en el estándar 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>

Reglas de sintaxis

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>.

Aquí están los CASE ejemplos de declaraciones de los documentos de PostgreSQL (Postgres sigue el estándar SQL aquí):

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

o

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

Obviamente, la segunda forma es más limpia cuando solo compara un campo con una lista de valores posibles.La primera forma permite expresiones más complicadas.

Sybase tiene lo mismo sintaxis de caso como servidor SQL:

Descripción

Admite expresiones SQL condicionales;se puede utilizar en cualquier lugar donde se pueda utilizar una expresión de valor.

Sintaxis

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

Sintaxis de casos y valores

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

Parámetros

caso

comienza la expresión del caso.

cuando

precede a la condición de búsqueda o a la expresión que se va a comparar.

condición_búsqueda

se utiliza para establecer condiciones para los resultados que se seleccionan.Las condiciones de búsqueda para expresiones de casos son similares a las condiciones de búsqueda en una cláusula donde.Las condiciones de búsqueda se detallan en la Guía del usuario de Transact-SQL.

entonces

precede a la expresión que especifica un valor de resultado de caso.

expresión

es un nombre de columna, una constante, una función, una subconsulta o cualquier combinación de nombres de columna, constantes y funciones conectadas mediante operadores aritméticos o bit a bit.Para obtener más información sobre las expresiones, consulte "Expresiones" en.

Ejemplo

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

Busqué la misma página de Oracle y parece que esta es la misma sintaxis, solo que se describe ligeramente diferente.

Enlace: Oráculo/PLSQL:Declaración del caso

Oráculo sintaxis de la documentación 11g:

CASE { simple_case_expression | searched_case_expression }
     [ else_clause ]
     END

expresión_caso_simple

expr { WHEN comparison_expr THEN return_expr }...

expresión_caso_buscado

{ WHEN condition THEN return_expr }...

otra_cláusula

ELSE else_expr

Un punto a tener en cuenta en el caso de Oracle es que si no hay coincidencias y no hay otra parte, se genera una excepción.

Sintaxis de declaración de caso en SQL SERVER:

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

Y también podemos usar como se muestra a continuación:

CASE 
   WHEN column=value1 THEN 1
   WHEN column=value3 THEN 2
   WHEN column=value3 THEN 3
   WHEN column=value1 THEN 4
   ELSE ''
END
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top