2.1 Declaração CASO

Existem duas maneiras de escrever uma instrução em SQL CASE. A primeira entrada faz com que pareça uma mudança da linguagem Java, enquanto o segundo formato é mais como plural if-else.

Vamos começar com a primeira opção - um interruptor analógico. O formato geral é:

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

Realmente muito parecido com switch, apenas as palavras são ligeiramente diferentes:

SQL Java
caso x mudar (x) {
quando valor valor do caso:
então resultado resultado de retorno;
outro resultado padrão: retorna o resultado;
fim }

Vamos traduzir um exemplo de Java para 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 versão da instrução CASE

Existe também uma segunda versão do operador CASE, que, como mencionado acima, é mais como plural if-else. O formato geral é:

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

Aqui, as condições são simplesmente verificadas sequencialmente, se alguma delas for verdadeira, o resultado especificado será retornado. Se nenhuma das condições for verdadeira, o valor especificado em ELSE.

Vamos traduzir um exemplo de Java para 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 Resolva o problema usando a instrução CASE

Vamos anotar algumas consultas interessantes. Lembre-se, tínhamos uma tarefa - adicionar a palavra "EXPIRED!" ao nome de tarefas passadas na tabela de tarefas . Isso pode ser feito facilmente com o CASE.

Para o campo deadline , será parecido com a segunda versão da declaração CASE:


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

Um exemplo de uma consulta completa usando o operador CASE:


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

O resultado desta consulta será:

eu ia id_funcionário nome prazo final
1 1 EXPIRADO! Corrigir um bug no front-end 01/06/2022
2 2 Corrigir um bug no back-end 15/06/2022
3 5 comprar café 01/07/2022
4 5 comprar café 01/08/2022
5 5 comprar café 01/09/2022
6 (NULO) Limpe o escritório (NULO)
7 4 Aproveite a vida (NULO)
8 6 Aproveite a vida (NULO)