Jump to content
Marcio_123

Criando uma seleção no banco de dados quando produto estiver vencendo

Recommended Posts

pessoal blllll

 

to precisando listar no banco uns registro com renovação próxima de vencer.

 

EX: tenho um Cliente cadastrado em 01/05/2020 preciso selecionar ele proximo da renovação do contrato que se dar apos 6 meses ou 180 dias, dessa data que foi cadastrado.

SELECT * FROM tb_renovaçao where DATE_ADD(data_pgto, INTERVAL 180 DAY)"); 
// ou seja no caso ai estou selecionando registro que estão com data de 180 dias da data que fiz o cadastro.

 

mas ele não retorno os registros dentro do prazo.

Share this post


Link to post
Share on other sites

Aparentemente sua query esta errada, não tenho como testar no momento.

 

Mas o correto seria algo assim:
 

mysql> SELECT DATE_ADD( '2011-01-01', INTERVAL 6 month );
+--------------------------------------------+
| DATE_ADD( '2011-01-01', INTERVAL 6 month ) |
+--------------------------------------------+
| 2011-07-01                                 | 
+--------------------------------------------+

 

SELECT * FROM tb_renovacao WHERE data_pgto = DATE_ADD(CURDATE(), INTERVAL 180 DAY)"); 
SELECT * FROM tb_renovacao WHERE data_pgto = DATE_ADD(NOW(), INTERVAL 180 DAY)"); 

Observaçao: Não use acentução etc em nomes de bancos e tabelas.

Share this post


Link to post
Share on other sites

ola Williams blll,

 

fiz esse SELECT mas não voltou registros algum

 

SELECT * FROM tb_renovacao WHERE data_pgto = DATE_ADD(CURDATE(), INTERVAL 6 month)

nesse caso ai estou trazendo apenas datas acrescentadas de 6 meses ou 180 dias certo ? com base no meu campo data que esta gravado, detalhe meu campos esta com formato VARCHAR.

Share this post


Link to post
Share on other sites

Normalize seu banco, data ou é date, datetime ou timestamp etc, menos varchar.

 

ou use  strtotime para esta modificação da data!
 

$day = date('d-m-Y');
$newDate = date('d/m/Y', strtotime($day . " +6 month"));
echo $newDate; // 26/11/2020
SELECT * FROM tb_renovacao WHERE data_pgto = $newDate

Share this post


Link to post
Share on other sites

Olá @Williams Duarte aproveitando o post do amigo ai

 

Quando no banco de dados ele contem duas forma de pagamento

EX:

vencimento a cada 30 dias

vencimento por ano como posso apresentar 

 

Neste caso como posso classificar das datas de 30 dias e 365 dias

 

Share this post


Link to post
Share on other sites
9 horas atrás, Jack Oliveira disse:

Olá @Williams Duarte aproveitando o post do amigo ai

 

Quando no banco de dados ele contem duas forma de pagamento

EX:

vencimento a cada 30 dias

vencimento por ano como posso apresentar 

 

Neste caso como posso classificar das datas de 30 dias e 365 dias

 


Frequentemente deixo algumas Schedules rodando!

docker run -d image_name '*/30 * * * * ___cmdstring___'

Se é uma recorrencia mensal, que vence daqui 7 dias, jogo em uma fila e disparo a cobrança. Um dia antes do vencimento, vejo quem ainda no pagou e disparo um outro aviso. 3 dias depois outro, nao pagou, dispara um aviso de bloqueio após alguns dias , isto você controla em flags no DB

Se a recorrencia é trimestral, semestral ou anual, não faz diferença na consulta, o importante é declarar no select, qual é o intervalo. 
 

SELECT DATE_ADD( CURDATE(), INTERVAL 7 days );
SELECT DATE_ADD( CURDATE(), INTERVAL 1 days );

E fazer o filtro.

Obs, você tem que ter outros Jobs analisando cadastro etc, para nao ter erro nas cobranças, mas tudo depende das regras de negocios.

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.