Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Função CURDATE não funciona no SQLite

Olá, pessoal. Bom dia.
Conforme o exercício "Filtrando clientes com idade elegível para ofertas personalizadas" do curso, notei que o gabarito do exercício apresenta o seguinte código:

SELECT Nome, DataNascimento, CPF
FROM TabelaClientes
WHERE NOT (YEAR(CURDATE()) - YEAR(DataNascimento) < 18);

Entretanto ao tentar rodá-lo no SQLite, é disparada a seguinte mensagem de erro na qual ele diz que não reconhece a função YEAR:

SQLITE_ERROR: sqlite3 result code 1: no such function: YEAR

Haveria outra resolução fora a que foi dada pelo gabarito?

Fico grato desde já pela ajuda.

3 respostas

Pessoal, autor do post comentando aqui!

Após alguma pesquisa, li a documentação do SQLite e achei a seguinte solução para este exercício:

SELECT Nome, DataNascimento, CPF
FROM TabelaClientes
WHERE date() - datanascimento >= 18;

Output:

Foto do output(saída) da query

Ela seria válida?

solução!

Olá, Gabriel! Tudo bem?

Sua pesquisa na documentação foi produtiva. Sua solução funciona porque o SQLite trata a subtração de strings de data de uma forma simplificada, mas é importante notar que ele subtrai apenas o ano inicial da string, o que resolve o seu problema de forma direta.

Mas, para garantir uma precisão maior em bancos de dados SQL, o ideal é utilizar funções que lidam especificamente com a formatação de datas. No SQLite, como não temos o YEAR ou CURDATE, utilizamos a função strftime.

Abaixo deixo uma sugestão de código:

SELECT Nome, DataNascimento, CPF
FROM TabelaClientes
WHERE strftime('%Y', 'now') - strftime('%Y', DataNascimento) \>= 18;

Neste ponto, a função strftime('%Y', 'now') extrai o ano atual, enquanto o segundo termo extrai o ano de nascimento da tabela. Essa é a forma mais segura e padronizada de realizar cálculos de idade dentro do ambiente SQLite. Sua lógica de usar o operador >= 18 está perfeita e substitui corretamente o NOT (... < 18) do gabarito de forma mais legível.

Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Muito obrigado, Monalisa!