none
Consultar Aniversariantes apenas com dia e mes RRS feed

  • Pergunta

  • Pessoal;

    preciso desenvolver uma consulta na tabela Pessoa que traga os aniversariantes de um determinado período, pensei da seguinte forma:

    select * from pessoa
    where day(DataNascimento) >= 15 and  day(DataNascimento) <= 30
    and MONTH(DataNascimento) = 6

    só que tenho um problema, o sistema vai consultar toda semana os aniversariantes, neste caso tenho um problema, por que quando numa determinada semana eu tiver a seguinte condição 28/04 a 05/05, não consigo colocar o mês diferente, como posso indicar este período para pegar os aniversariantes se no caso acima eu estou indicando apenas um mês! existe outro modo mais fácil de fazer a consulta?

    WS

    sexta-feira, 10 de maio de 2013 13:24

Respostas

  • Entendi, esqueci a questão do ano, uma coisa rapida que pensei foi em fazer um "OR", por exemplo que voce falou de 28/04 a 05/50, no where ele pega todo mundo que fazer aniversario >= 28 de abril somente em abril e no or todo mundo que faz no dia <= 5 somente de maio, veja o que acha:

    select * from pessoa
    where (day(DataNascimento) >= 28 and MONTH(DataNascimento) = 4)
    or  (day(DataNascimento) <= 5 and MONTH(DataNascimento) = 5)


    Alexandre Matayosi Conde Mauricio.

    • Marcado como Resposta Wagner Sena PE sexta-feira, 10 de maio de 2013 18:21
    sexta-feira, 10 de maio de 2013 14:41

Todas as Respostas

  • Voce pode usar a função getdate() incrementando ou decrementando o periodo que voce quer, por ex abaixo traria os aniversariantes que estivessem entre a semana passada e a proxima (-7 e +7 respectivamente):

    select * from pessoa
    where DataNascimento between GETDATE() -7 and GETDATE() + 7


    Alexandre Matayosi Conde Mauricio.

    sexta-feira, 10 de maio de 2013 14:25
  • mas neste caso o problema é o ano, no banco tenho 28/04/1978 se eu fizer desta forma ele vai fazer o incremento com o ano atual 2013 desta forma a consulta nao vai dar certo...
    sexta-feira, 10 de maio de 2013 14:30
  • por exemplo se no banco tenho aniversariante 12/05/1984 e eu faço a consulta: 

    select * from pessoa
    where DataNascimento between GETDATE() -7 and GETDATE() + 7

    concorda comigo que a consulta não vai retornar nada? pois ele fará a consulta between 03/05/2013 and 17/05/2013


    sexta-feira, 10 de maio de 2013 14:32
  • Entendi, esqueci a questão do ano, uma coisa rapida que pensei foi em fazer um "OR", por exemplo que voce falou de 28/04 a 05/50, no where ele pega todo mundo que fazer aniversario >= 28 de abril somente em abril e no or todo mundo que faz no dia <= 5 somente de maio, veja o que acha:

    select * from pessoa
    where (day(DataNascimento) >= 28 and MONTH(DataNascimento) = 4)
    or  (day(DataNascimento) <= 5 and MONTH(DataNascimento) = 5)


    Alexandre Matayosi Conde Mauricio.

    • Marcado como Resposta Wagner Sena PE sexta-feira, 10 de maio de 2013 18:21
    sexta-feira, 10 de maio de 2013 14:41
  • Bom dia,

    Wagner, experimente fazer testes mais ou menos dessa forma:

    select * from Pessoa
    where DATEADD(YEAR, DATEDIFF(YEAR, DataNascimento, @DataIni), DataNascimento) between @DataIni and @DataFim
    
    -- @DataIni = '28/04/2013' e @DataFim = '05/05/2013'

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 10 de maio de 2013 15:07