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