Observe a tabela a seguir de um banco de dados: PROFESSOR (CodProfessor integer primary key, NomeProfessor varchar(40), Titulacao varchar(45), DataAdmissao date) Considere uma consulta ao banco de dados que liste o nome dos professores e a data de admissão dos que entraram na Instituição no ano de 2018 ou no mês de julho, independente do ano. Assinale qual consulta abaixo estaria correta.
- A)SELECT Nomeprofessor, dataAdmissao from PROFESSOR where dataadmissao in(07, 2018).
Errada, porque in(07, 2018) não seleciona corretamente o ano ou o mês de uma data, apenas compara valores soltos sem extrair partes da data.
- B)SELECT Nomeprofessor, dataAdmissao from PROFESSOR where dataadmissao like ‘%2018’ or like ‘%07’
Errada, porque like é uma comparação textual e a sintaxe ainda está incompleta, já que falta repetir a coluna na segunda condição.
- C)SELECT Nomeprofessor, dataAdmissao from PROFESSOR where year(dataadmissao)=2018 or month(dataadmissao)=07
Certa, porque extrai o ano e o mês da data e aplica a condição de "2018" ou "julho", exatamente como o enunciado pede.
- D)SELECT Nomeprofessor, dataAdmissao from PROFESSOR where dataadmissao between '2018-07-15' and '2018-09-15'
Errada, porque between cria um intervalo de datas contínuo, mas a questão pede duas condições específicas, não um período entre duas datas.
Gabarito: C
Quando a questão fala em "ano de 2018 ou no mês de julho, independente do ano", ela está pedindo um filtro por partes da data. Em SQL, a forma mais direta é extrair o ano e o mês da coluna de data e comparar com os valores desejados. Assim, você não depende do texto da data nem faz comparação confusa com intervalos que não representam a regra do enunciado. A lógica correta é: trazer os registros em que o ano de DataAdmissao seja 2018 ou o mês seja 7. Por isso a consulta com year(dataAdmissao)=2018 or month(dataAdmissao)=07 atende exatamente ao pedido. Repare que basta uma das condições ser verdadeira, porque o enunciado usa "ou". As alternativas com in, like e between tentam parecer elegantes, mas escorregam no detalhe. in não funciona assim para separar ano e mês dentro de uma data; like é comparação textual e data não deve ser tratada desse jeito; between cria um intervalo contínuo, quando o problema pede dois critérios distintos. Em prova, a banca gosta dessa mistura de conceito de data com cara de string para confundir. Resumo prático: quando a questão falar em ano, mês, dia ou partes de uma data, pense em funções como year(), month() ou day(). É o tipo de leitura que evita cair em pegadinha de data mal montada.