segunda-feira, 19 de março de 2012

Aniversariantes do mês no MySQL



Salve salve papeiros.

Agora que você já sabe como fazer para obter os aniversariantes do mês em PostgreSQL, vou ensinar a obter os aniversariantes através do banco de dados MySQL.

Assim como no outro post, vamos primeiramente criar a tabela.



1º - A estrutura da tabela:
 Create Table aniversariantes   
  (   
   id_aniversariante bigint,    
   nome varchar(50),    
   dt_nascimento date   
  );  

2º - Agora vamos inserir os registros:
 Insert Into aniversariantes(id_aniversariante,nome,dt_nascimento)   
  Values(1,'Aniversariante 1','2012-01-01')   
  ,(2,'Aniversariante 2','2012-02-01')   
  ,(3,'Aniversariante 3','2012-03-01')   
  ,(4,'Aniversariante 4','2012-04-01')   
  ,(5,'Aniversariante 5','2012-05-01')   
  ,(6,'Aniversariante 6','2012-06-01')   
  ,(7,'Aniversariante 7','2012-07-01')   
  ,(8,'Aniversariante 8','2012-08-01')   
  ,(9,'Aniversariante 9','2012-09-01')   
  ,(10,'Aniversariante 10','2012-10-01')   
  ,(11,'Aniversariante 11','2012-11-01')   
  ,(12,'Aniversariante 12','2012-12-01');   

3º - Com a tabela criada e alimentada, vamos extrair os registros dos aniversariantes:
  Select *    
  From aniversariantes   
  Where Month(dt_nascimento) = Month(Now());  

Pronto, muito simples!

Seguindo este exemplo, nós poderíamos extrair os aniversariantes deste dia, os aniversariantes que fazem aniversario neste dia no decorrer do ano e por ai vai.

Fico por aqui, esperando mais uma vez ter sido útil, um grande abraço e até a próxima.

_ _
Fabiano Abreu

Clique aqui e veja todas as matérias sobre MySQL

11 comentários:

  1. Fabiano, parabéns pelo blog, acabei de conhecer e gostei bastante de suas dicas, gostaria de aproveitar a oportunidade para te perguntar se seria possivel, e se por acaso for, como por exemplo retornar um registro nulo ou simplesmente zero se por acaso no intervalo de datas não houvesse nenhum registro de aniversariantes no mes de agosto por exemplo, só pra você entender melhor, estou usando um select semelhante para me retornar a qtd de registros nos grupos dos meses para alimentar um gráfico, ai no mes que tem os registro retornar o numero mais o registro até ai tudo bem, só que eu queria retornar o mês nulo como nenhum registro, o intervalo entre as datas, espero que tenha entendido, e mais uma vez parabéns!

    ResponderExcluir
  2. Olá Marconi,

    Imagino que de posse das informações irá gerar um gráfico, me corrija se estiver errado, mas você poderá fazer o seguinte.

    Select
    (Select ifnull(count(id_aniversariante),0) from aniversariantes
    where month(dt_nascimento) = 1) As 'Janeiro'
    ,(Select ifnull(count(id_aniversariante),0) from aniversariantes
    where month(dt_nascimento) = 2) As 'Fevereiro'
    ,(Select ifnull(count(id_aniversariante),0) from aniversariantes
    where month(dt_nascimento) = 3) As 'Março'
    ,(Select ifnull(count(id_aniversariante),0) from aniversariantes
    where month(dt_nascimento) = 4) As 'Abril'
    ,(Select ifnull(count(id_aniversariante),0) from aniversariantes
    where month(dt_nascimento) = 5) As 'Maio'
    ...

    Veja se é isto que deseja, grande abraço e obrigado.

    ResponderExcluir
  3. Olá,

    Como eu faria para mostrar apenas do dia?

    Grato.

    ResponderExcluir
    Respostas
    1. Caro 'Anônimo',

      Ao invés de usar a função Month, use a função Day, desta forma:

      Select *
      From aniversariantes
      Where Day(dt_nascimento) = Day(Now());

      Abraços.

      Excluir
    2. Obrigado, Fabiano!

      Excluir
  4. Respostas
    1. Olá Teste,

      Eu que agradeço o feedback.

      Abraços.

      Excluir
  5. Como fazer para não mostrar o ano, nesta situação?

    ResponderExcluir
    Respostas
    1. Amigo,

      Se o "não mostrar o ano" for no resultado do select, use as funções day(campo), para mostrar o dia e, month(campo) para mostrar o mês.

      Ex:

      Select day(campo), month(campo) from...

      Abraços e obrigado pela visita

      Excluir
    2. FEITO!
      Obrigado, Fabiano.

      Me ajuda no aperfeiçoamento:
      SELECT MONTH( "Nascimento" ), DAY( "Nascimento" ), "Nome", "Email" FROM "CC - Cadastro Geral" WHERE MONTH( "Nascimento" ) = MONTH( NOW( ) ) ORDER BY DAY( "Nascimento" )

      Como fazer para o MONTH ser solicitado na hora de execução da consulta?
      Carlos Alberto

      Excluir
    3. Carlos,

      Se você estiver usando uma stored procedure, e nela está passando os mês como parâmetro de entrada, troque o now() do MONTH( NOW( ) ) pelo parâmetro, se for uma consulta, ao invés da variável MONTH, passe o mês desejado.

      Em caso de dúvidas, poste aqui.

      Abraços.

      Excluir