2.1 Declaración CASO

Hay dos formas de escribir una sentencia en SQL CASE. La primera entrada hace que parezca un cambio del lenguaje Java, mientras que el segundo formato es más como plural if-else.

Comencemos con la primera opción: un análogo de interruptor. El formato general es:

CASE case_value
	WHEN value1 THEN result1
	[WHEN value2 THEN result2] ...
	[ELSE resultN]
END

Realmente muy similar a switch, solo que las palabras son ligeramente diferentes:

sql Java
caso x cambiar (x) {
cuando el valor valor del caso:
entonces resultado resultado devuelto;
otro resultado predeterminado: devolver resultado;
fin }

Traduzcamos un ejemplo de Java a SQL:

Java sql
switch (a) {
   case 1: return "one";
   case 2: return "two";
   case 3: return "three";
   default: return "unknown";
}
CASE a
   WHEN 1 THEN 'one'
   WHEN 2 THEN 'two'
   WHEN 3 THEN 'three'
   ELSE 'unknown'
END

2.2 Segunda versión de la sentencia CASE

También hay una segunda versión del operador CASEque, como se mencionó anteriormente, es más como plural if-else. El formato general es:

CASE
	WHEN condition 1 THEN result1
	[WHEN condition 2 THEN result2] ...
	[ELSE resultN]
END

Aquí, las condiciones simplemente se verifican secuencialmente, si alguna de ellas es verdadera, se devolverá el resultado especificado. Si ninguna de las condiciones es verdadera, entonces el valor especificado en ELSE.

Traduzcamos un ejemplo de Java a SQL:

Java sql
if (a == 3)
	return "three";
CASE
   WHEN a=3 THEN 'three'
END
if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END
if (a == 1)
	return "three";
else if (a == 2)
	return "two";
else if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=1 THEN 'one'
   WHEN a=2 THEN 'two'
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END

2.3 Resuelve el problema usando la instrucción CASE

Anotemos alguna consulta interesante. Recuerde, teníamos una tarea: agregar la palabra "¡EXPIRADO!" al nombre de tareas pasadas en la tabla de tareas . Se puede hacer fácilmente con el CASE.

Para el campo de fecha límite , se verá como la segunda versión de la declaración CASE:


CASE
	WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name)
	ELSE name
END
        

Un ejemplo de una consulta completa usando el operador CASE:


SELECT
    id,
    emploee_id,
    CASE WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name) ELSE name END AS name,
    deadline         	
FROM task
        

El resultado de esta consulta será:

identificación empleado_id nombre fecha límite
1 1 ¡VENCIÓ! Arreglar un error en la interfaz 2022-06-01
2 2 Arreglar un error en el backend 2022-06-15
3 5 comprar cafe 2022-07-01
4 5 comprar cafe 2022-08-01
5 5 comprar cafe 2022-09-01
6 (NULO) limpiar la oficina (NULO)
7 4 Disfruta la vida (NULO)
8 6 Disfruta la vida (NULO)