Autor Tópico: Select selecionando próximos aniversariantes  (Lida 6997 vezes)

George Carvalho

  • Expert
  • *****
  • Mensagens: 1373
    • Email
Select selecionando próximos aniversariantes
« Online: Janeiro 28, 2008, 09:04:00 am »
Preciso selecionar através de uma Select, a partir da Data de nascimento, as pessoas que estarão aniversariando nos próximos sete dias.

Alguém sabe como fazer?

Obrigado
George Carvalho
Porto de Galinhas/PE

netsoft

  • Visitante
Re: Select selecionando próximos aniversariantes
« Responder #1 Online: Janeiro 28, 2008, 09:54:31 am »
da uma olhada neste topico, isto que vc precisa.

http://www.netmake.com.br/forum/index.php?topic=569.msg1664#new


George Carvalho

  • Expert
  • *****
  • Mensagens: 1373
    • Email
Re: Select selecionando próximos aniversariantes
« Responder #2 Online: Janeiro 28, 2008, 11:22:48 am »
Amigo não vi a solução no link indicado.

Obrigado.
George Carvalho
Porto de Galinhas/PE

netsoft

  • Visitante
Re: Select selecionando próximos aniversariantes
« Responder #3 Online: Janeiro 28, 2008, 09:06:40 pm »
http://www.netmake.com.br/forum/index.php?topic=569.msg1661#msg1661

Ali esta o que vc vai usar, agora o select, nao tem como eu montar para vc, pois vc nao passou a sua tabela.

Coloca ai para nos vermos

Haroldo

  • Expert
  • *****
  • Mensagens: 6293
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re: Select selecionando próximos aniversariantes
« Responder #4 Online: Janeiro 28, 2008, 10:53:34 pm »
select id, nome, datanasc from contatos WHERE datanasc>= NOW()  and datanasc<=DATE_ADD(NOW(),INTERVAL 7 DAY);

Obs: Para MySql

fonte de pesquisa: http://mirrors-r-us.net/doc/refman/4.1/pt/date-and-time-functions.html

Fiz testes aqui e funcionou.

netsoft

  • Visitante
Re: Select selecionando próximos aniversariantes
« Responder #5 Online: Janeiro 29, 2008, 07:30:23 am »
acho que e melhot mesmo, pois vem so vem os resultados direto no mysql e é bem mais rapido

George Carvalho

  • Expert
  • *****
  • Mensagens: 1373
    • Email
Re: Select selecionando próximos aniversariantes
« Responder #6 Online: Janeiro 29, 2008, 11:33:42 am »
Obrigado mas este Select não funciona como eu quero, ele trata a data de nascimento com o ano, eu preciso que seja filtrado os registros em que a pessoa complete aniversario nos próximos sete dias a partir da data de nascimento. Não importa o ano de nascimento e sim dia e mês.
George Carvalho
Porto de Galinhas/PE

Haroldo

  • Expert
  • *****
  • Mensagens: 6293
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re: Select selecionando próximos aniversariantes
« Responder #7 Online: Janeiro 29, 2008, 12:06:15 pm »
Certo, tem razão:
Mas com um pouquinho de criatividade e estudando as funções de data do sql do MySQL podemos chegar no que é necessário:

SELECT  id, nome, aniversario FROM contatos
WHERE concat_ws('-',year(now()),month(aniversario),day(aniversario)) >= NOW()  and concat_ws('-',year(now()),month(aniversario),day(aniversario))<=DATE_ADD(NOW(),INTERVAL 7 DAY);


Se você se aprofundar vai conseguir um script até melhor que esse.


Obrigado mas este Select não funciona como eu quero, ele trata a data de nascimento com o ano, eu preciso que seja filtrado os registros em que a pessoa complete aniversario nos próximos sete dias a partir da data de nascimento. Não importa o ano de nascimento e sim dia e mês.

Haroldo

  • Expert
  • *****
  • Mensagens: 6293
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re: Select selecionando próximos aniversariantes
« Responder #8 Online: Janeiro 29, 2008, 01:02:45 pm »
O Script vai funcionar melhor com curdate() no lugar de now()

Certo, tem razão:
Mas com um pouquinho de criatividade e estudando as funções de data do sql do MySQL podemos chegar no que é necessário:

SELECT  id, nome, aniversario FROM contatos
WHERE concat_ws('-',year(now()),month(aniversario),day(aniversario)) >= NOW()  and concat_ws('-',year(now()),month(aniversario),day(aniversario))<=DATE_ADD(NOW(),INTERVAL 7 DAY);


Se você se aprofundar vai conseguir um script até melhor que esse.


Obrigado mas este Select não funciona como eu quero, ele trata a data de nascimento com o ano, eu preciso que seja filtrado os registros em que a pessoa complete aniversario nos próximos sete dias a partir da data de nascimento. Não importa o ano de nascimento e sim dia e mês.

George Carvalho

  • Expert
  • *****
  • Mensagens: 1373
    • Email
Re: Select selecionando próximos aniversariantes
« Responder #9 Online: Janeiro 31, 2008, 07:53:39 am »
Haroldo,

Infelizmente não filtrou os registros, ja analizei o Select "com o pouco conhecimento que tenho" e não achei nenhum erro.

Não sei se vc chegou a testar o select.

Obrigado
George Carvalho
Porto de Galinhas/PE

Haroldo

  • Expert
  • *****
  • Mensagens: 6293
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re: Select selecionando próximos aniversariantes
« Responder #10 Online: Fevereiro 05, 2008, 11:48:11 am »
pode me enviar um dump de sua tabela?
é Mysql?

wetsite

  • Iniciante
  • **
  • Mensagens: 57
  • Aprender e aprimorar sempre...
    • Email
Re: Select selecionando próximos aniversariantes
« Responder #11 Online: Agosto 07, 2010, 11:33:01 am »
Prezados,

Se alguém ainda interessar, acho que o imparse ocorrido é pq o código enviado por Harold está perfeito, porém pega os aniversariante a partir de amanhã. Se quiser nos dados tenham a data de hoje também, segue o código:

SELECT id, nome, aniversario FROM contatos
WHERE (concat_ws('-',year(now()),month(aniversario),day(aniversario)) >= NOW()  and concat_ws('-',year(now()),month(aniversario),day(aniversario))<=DATE_ADD(NOW(),INTERVAL 7 DAY))
or
(DAY(aniversario) = DAY(CURDATE()) AND MONTH(aniversario) = MONTH(CURDATE()))

Att,

Welington Santos
Welington Santos

Arquimedes

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 561
  • Ajudar para ser ajudado
Re:Select selecionando próximos aniversariantes
« Responder #12 Online: Janeiro 28, 2013, 10:50:48 pm »
Prezados,

Se alguém ainda interessar, acho que o imparse ocorrido é pq o código enviado por Harold está perfeito, porém pega os aniversariante a partir de amanhã. Se quiser nos dados tenham a data de hoje também, segue o código:

SELECT id, nome, aniversario FROM contatos
WHERE (concat_ws('-',year(now()),month(aniversario),day(aniversario)) >= NOW()  and concat_ws('-',year(now()),month(aniversario),day(aniversario))<=DATE_ADD(NOW(),INTERVAL 7 DAY))
or
(DAY(aniversario) = DAY(CURDATE()) AND MONTH(aniversario) = MONTH(CURDATE()))

Att,

Welington Santos


Estou tentando sem sucesso realizar essa sql, alguem conseguiu?
abaixo a sql da tabela para teste:

CREATE TABLE `contatos` (
  `id` int(11) NOT NULL auto_increment,
  `nome` varchar(100) NOT NULL,
  `aniversario` date NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

--
-- Extraindo dados da tabela `contatos`
--

INSERT INTO `contatos` (`id`, `nome`, `aniversario`) VALUES (1, 'arquimedes', '2013-01-29'),
(2, 'xico tripa', '1999-01-30'),
(3, 'ze', '2000-01-31'),
(4, 'cici', '1078-02-01'),
(8, 'tiazinha', '1923-06-04');
segue a sql da tabela em teste:


Att Arquimedes
« Última modificação: Janeiro 29, 2013, 10:24:35 am por Arquimedes »

Arquimedes

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 561
  • Ajudar para ser ajudado
Re:Select selecionando próximos aniversariantes-Resolvido
« Responder #13 Online: Janeiro 29, 2013, 04:23:02 pm »
Testei e funcionou:

WHERE
    (month(nascimento) = month(now()) and day(nascimento) = (day(now()))+7) '')

Aniversariando dentro de 7 dias


Com a ajuda do grande George Carvalho a sql ficou assim;


select nome,nascimento  from contatos
WHERE
    (month(nascimento) = month(now()) and day(nascimento) = (day(now()))+3)


Valew George, obrigado pela força.


Att Arquimedes