9.13.1. CASE
La expresión CASE de SQL es una expresión condicional genérica, similar a las sentencias if/else de otros lenguajes:
CASE WHEN condition THEN result END
Las cláusulas CASE pueden utilizarse siempre que una expresión sea válida.La condición es una expresión que devuelve un resultado booleano. Si el resultado es verdadero entonces el valor de la expresión CASE es el resultado que sigue a la condición. Si el resultado es falso, cualquier cláusula WHEN posterior se busca de la misma manera. Si ninguna condición WHEN es verdadera, el valor de la expresión case es el resultado de la cláusula ELSE. Si se omite la cláusula ELSE y ninguna condición coincide, el resultado es nulo.
Un ejemplo:
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
Los tipos de datos de todas las expresiones de resultado deben ser convertibles a un único tipo de salida. Véase la Sección 10.5 para más detalles.
La siguiente expresión CASE «simple» es una variante especializada de la forma general anterior:
CASE expression WHEN value THEN result END
La expresión se calcula y se compara con todas las especificaciones de valor en las cláusulas WHEN hasta que se encuentre una que sea igual. Si no se encuentra ninguna coincidencia, se devuelve el resultado de la cláusula ELSE (o un valor nulo). Esto es similar a la sentencia switch
en C.
El ejemplo anterior puede escribirse utilizando la sintaxis CASE simple:
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
Una expresión CASE no evalúa ninguna subexpresión que no sea necesaria para determinar el resultado. Por ejemplo, esta es una forma posible de evitar un fallo de división por cero:
SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;