mysql - Implementando view - Stack Overflow em Português
Exibir extrato de uma determinada conta com os respectivos movimentos de um período de quinze dias anteriores à data de solicitação com os seguintes dados:
Identificação do titular da conta (CPF ou CNPJ);
Tipo da conta;
Situação da conta;
Valor do movimento;
Eu implementei essa view:
create view v_extrato_conta as
select c.agencia,
c.numero_conta,
t.CPF_CNPJ,
c.estado_conta,
m.operacao,
m.data_movimento,
c.saldo
inner join correntista t
on c.idconta = t.idcorrentista
on c.idconta = m.idmovimento;
e criei essa procedure para chamar essa view:
create procedure exibi_extrato_conta(data_solicitacao date)
select * from v_extrato_conta where data_solicitacao < 15;
mas eu não consigo ter retorno de nenhum dado, se eu retirar a condição de data_solicitacao < 15 e passar qualquer data de solicitação e chamar a procedure, ela me trás os dados. Como eu poderia fazer essa query decrementando 15 dias da data_solicitacao ? Espero que possam me ajudar.
João Vitor Felício Sant' AnaJoão Vitor Felício Sant' Ana
Se data_solicitacao é um parâmetro de sua procedure qual o sentido de você utilizar tal parâmetro em sua query comparando com uma constante? Será que você não deveria verificar se data_movimento está no período de 15 dias anteriores à data_solicitacao? – anonimo 10/06/20 às 12:46
Caso o tipo de dado da coluna data_solicitacao seja date é necessário fazer o cast para poder comparar os valores de maneira correta.
Em sua query você tem uma data_solicitação (tipo date) e está tentando fazer uma comparação com o tipo inteiro. Por isso o problema em sua query.
No caso de datas você deve utilizar o operador interval do mysql, porém cada sistema de banco de dados possui suas funções de comparação de datas. Supondo que queremos o intervalo entre a data de hoje e quize dias atrás, devemos fazer:
SELECT * FROM v_extrato_conta WHERE data_solicitacao BETWEEN DATE_ADD(NOW(), INTERVAL - 15 DAY) AND NOW();
Em meu exemplo utilizei o operador between, mas pode ser utilizando também os operadores maior igual da maneira que está fazendo.
SELECT * FROM v_extrato_conta WHERE data_solicitacao <= NOW() AND
data_solicitacao >= DATE_ADD(NOW(), INTERVAL - 15 DAY);
Segue a documentação para date add mysql
respondida 10/06/20 às 7:54
2.15633 medalhas de ouro88 medalhas de prata1919 medalhas de bronze
Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag mysql sql sql-select view procedure ou faça sua própria pergunta.