Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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+
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.
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.
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+
mas funciona numa virade de mês ?!
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+
+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')
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
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+
Blz.. resolvido então.. :yes:
Veja se ajuda.