Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Depieri Barduchi

Próxima data no Mysql

Recommended Posts

Fala galera:

 

Seguinte:

 

tenho uma base onde existe a data de nascimento de clientes, porém é necessário que ao efetuar o login no sistema, na home apareça a lista com:

Aniversariante de hoje, amanhã e depois, ou seja 3 dias, como faço isso no mysql pois não posso apenas atribuir a data de hoje +3, pois os meses podem diferir em quantidade de dias.

 

Alguém pode dar uma luz?

vlw e t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw Motta, mas esse é uma outra dúvida minha que postei anteriormente e não consegui resolver ainda.

 

No caso achei uma QUASE solução

 

SELECT *
FROM `tb_cliente`
WHERE DAY( `datanascimento_cliente` ) = DAY( DATE_ADD( CURDATE( ) , INTERVAL 3
DAY ) )

mas eu preciso do resultado DENTRO do intervalo e não no 3º dia, por exemplo

vlw msm assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas comparando a string mes&dia de uma data dá para comparar com um intervalo

 

Suponha

 

maria , 04/05/1972 , 0504
joao  , 27/03/1950 , 0327
jose  , 01/12/1994 , 1201

 

 

pesquisando

 

sendo o + concatenar string

 

mes(data)+dia(data) between '0327' and '0329'

seria TRUE para o registro 2.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim Motta, mas e quando o mês tiver 28 ou 29 dias, como vou comparar?
teria de ser dinamicamente "day+3" por exemplo, entendeu?

 

vlw e t+

 

 

mas comparando a string mes&dia de uma data dá para comparar com um intervalo

 

Suponha

 

maria , 04/05/1972 , 0504
joao  , 27/03/1950 , 0327
jose  , 01/12/1994 , 1201

 

 

pesquisando

 

sendo o + concatenar string

 

mes(data)+dia(data) between '0327' and '0329'

seria TRUE para o registro 2.



achei uma resposta galera, não sei se é a melhor, mas funcionou, teria como vocês analizarem pf?

SELECT *
FROM `tb_cliente`
WHERE PERIOD_DIFF( DAY( `datanascimento_cliente` ) >= DAY( DATE_ADD( CURDATE( ) , INTERVAL 1
DAY ) ) , DAY( `datanascimento_cliente` ) >= DAY( DATE_ADD( CURDATE( ) , INTERVAL 5
DAY ) ) )

vlw e t+



Erro! ele traz outros meses dentro do intervalo!
outra sugestão?

 

 

 

achei uma resposta galera, não sei se é a melhor, mas funcionou, teria como vocês analizarem pf?

SELECT *
FROM `tb_cliente`
WHERE PERIOD_DIFF( DAY( `datanascimento_cliente` ) >= DAY( DATE_ADD( CURDATE( ) , INTERVAL 1
DAY ) ) , DAY( `datanascimento_cliente` ) >= DAY( DATE_ADD( CURDATE( ) , INTERVAL 5
DAY ) ) )

vlw e t+



Achei uma outra opção!

SELECT *
FROM `tb_cliente`
WHERE PERIOD_DIFF( DAY( `datanascimento_cliente` ) >= DAY( DATE_ADD( CURDATE( ) , INTERVAL 1
DAY ) ) , DAY( `datanascimento_cliente` ) >= DAY( DATE_ADD( CURDATE( ) , INTERVAL 5
DAY ) ) )
AND MONTH( `datanascimento_cliente` ) = '03'

Vou fazer mais uns testes, qqr coisa aviso

Vlw e t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então motta não terminei de testar ainda rsrsrs
segue fonte atualizado.

SELECT *
FROM `tb_cliente`
WHERE PERIOD_DIFF( DAY( `datanascimento_cliente` ) >= DAY( DATE_ADD( CURDATE( ) , INTERVAL 1
DAY ) ) , DAY( `datanascimento_cliente` ) >= DAY( DATE_ADD( CURDATE( ) , INTERVAL 5
DAY ) ) )
AND MONTH( `datanascimento_cliente` ) >= Month( Now( ) )

vou testar mais e aviso, vlw e t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

+ou- isto que pensei, não tenho MySql p/ testar

SELECT *
FROM `tb_cliente`
WHERE  lpad(month(`datanascimento_cliente`),2,'0')+lpad(day(`datanascimento_cliente`),2,'0') between
       lpad(month(CURDATE( )),2,'0')+lpad(day(CURDATE( )),2,'0')     and
       lpad(month(CURDATE( )+3),2,'0')+lpad(day(CURDATE( )+3),2,'0')  

 


Compartilhar este post


Link para o post
Compartilhar em outros sites

tente assim:

select * from TABELA where month(nascimento) = month(curdate())
and day(nascimento)=day(curdate())
or day(nascimento)=day(curdate()+1)
or day(nascimento)=day(curdate()+2);

ou:

select nome, nascimento from tabela where
month(nascimento) = month(curdate()) and
day(nascimento)=day(curdate())
or
month(nascimento) = month(curdate()) and
day(nascimento)=day(curdate()+1)
or
month(nascimento) = month(curdate()) and
day(nascimento)=day(curdate()+2)

obs: adapte os nomes dos campos e da tabela

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, tentei um fonte de um post que encontreu depois, mas também não consegui resolver.

SELECT *
FROM `tb_cliente`
WHERE 
date(`datanascimento_cliente`) BETWEEN date(now()) AND date(now()) + INTERVAL 3 DAY

http://forum.imasters.com.br/topic/466152-listar-registros-dos-proximos-3-dias/

Vou testas as dicas anteriores e aviso no que deu, agradeço, vlw e t+



Vlw mas n rola, ele traz o mês anterior.
vlw

 

+ou- isto que pensei, não tenho MySql p/ testar

SELECT *
FROM `tb_cliente`
WHERE  lpad(month(`datanascimento_cliente`),2,'0')+lpad(day(`datanascimento_cliente`),2,'0') between
       lpad(month(CURDATE( )),2,'0')+lpad(day(CURDATE( )),2,'0')     and
       lpad(month(CURDATE( )+3),2,'0')+lpad(day(CURDATE( )+3),2,'0')  

 




Fernando C, sua segunda opção rolou cara!

select * from `tb_cliente` where
month(`datanascimento_cliente`) = month(curdate()) and
day(`datanascimento_cliente`)=day(curdate())
or
month(`datanascimento_cliente`) = month(curdate()) and
day(`datanascimento_cliente`)=day(curdate()+1)
or
month(`datanascimento_cliente`) = month(curdate()) and
day(`datanascimento_cliente`)=day(curdate()+2)

E também consegui uma segunda opção!

SELECT *
FROM `tb_cliente`
WHERE RIGHT( `datanascimento_cliente` , 5 )
BETWEEN RIGHT( DATE( NOW( ) ) , 5 )
AND RIGHT( DATE_ADD( DATE( NOW( ) ) , INTERVAL 9
DAY ) , 5 )
LIMIT 0 , 30

Vlw pela ajuda galera!
t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Blz.. resolvido então.. :yes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.