none
aniversariantes RRS feed

  • Pergunta

  • Quero fazer um select que mostre os aniversariantes com 2 dias de antecedência ?


    Atenciosamente,
    José Henrique Sabino

    segunda-feira, 16 de março de 2015 17:36

Respostas

  • Boa tarde,

    Experimente mais ou menos dessa forma:

    where
        DATEDIFF(DAY, CURRENT_TIMESTAMP, DATEADD(YEAR, YEAR(CURRENT_TIMESTAMP) - YEAR(DataNasc), DataNasc)) = 2
    

    Espero que ajude.


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

    • Marcado como Resposta Xarp2 segunda-feira, 16 de março de 2015 20:59
    segunda-feira, 16 de março de 2015 18:28
  • José!

    Se a data de nascimento conter o ano, tenta a query abaixo:

    -- Exemplo
    select * from Pessoa where
    	DATEDIFF(d, DATEADD(qq, DATEDIFF(qq, 0, DataNascimento), 0), DataNascimento) - DATEDIFF(d, DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0), GETDATE()) = 2
    
    -- Teste
    select DATEDIFF(d, DATEADD(qq, DATEDIFF(qq, 0, cast('1977/03/18' as date)), 0), cast('1977/03/18' as date)) - DATEDIFF(d, DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0), GETDATE())

    É meio louco, mas testei rapidinho e funcionou.

    Se a sua data não possui o ano, a resposta do Willian resolverá.

    Bom trabalho!

    • Marcado como Resposta Xarp2 segunda-feira, 16 de março de 2015 20:59
    segunda-feira, 16 de março de 2015 18:28
  • Faltou informar o sinal de menos para calcular MENOS 2 dias para ser antes do dia do aniversario, Lembrando que também se salvou o aniversario com o ano de nascimento essa select não ira funcionar

    select * from pessoas where datanascimento=DateAdd(day, -2,GetDate());

    Nao... Isso vai mostrar os aniversariantes de dois dias atras (voce subtrai a data de hoje).

    O que ele quer é pegar os aniversariantes de dois dias pra frente (data de hoje mais 2 dias)

    Mas vc tem razao pra o ano.. a forma correta é

    select * from pessoas where datepart(day,datanascimento)=datepart(day,DateAdd(day, 2,GetDate())) and 
    datepart(month,datanascimento)=datepart(month,DateAdd(day, 2,GetDate())) 
    ;

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------




    segunda-feira, 16 de março de 2015 18:29

Todas as Respostas

  • deste jeito:

    select * from pessoas where datanascimento=DateAdd(day, 2,GetDate());

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    segunda-feira, 16 de março de 2015 17:54
  • deste jeito:

    select * from pessoas where datanascimento=DateAdd(day, 2,GetDate());

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Faltou informar o sinal de menos para calcular MENOS 2 dias para ser antes do dia do aniversario, Lembrando que também se salvou o aniversario com o ano de nascimento essa select não ira funcionar
    select * from pessoas where datanascimento=DateAdd(day, -2,GetDate());


    Uma imagem vale mais do que mil palavras, mas ocupa 3 mil vezes mais espaço em disco

    segunda-feira, 16 de março de 2015 18:22
  • Boa tarde,

    Experimente mais ou menos dessa forma:

    where
        DATEDIFF(DAY, CURRENT_TIMESTAMP, DATEADD(YEAR, YEAR(CURRENT_TIMESTAMP) - YEAR(DataNasc), DataNasc)) = 2
    

    Espero que ajude.


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

    • Marcado como Resposta Xarp2 segunda-feira, 16 de março de 2015 20:59
    segunda-feira, 16 de março de 2015 18:28
  • José!

    Se a data de nascimento conter o ano, tenta a query abaixo:

    -- Exemplo
    select * from Pessoa where
    	DATEDIFF(d, DATEADD(qq, DATEDIFF(qq, 0, DataNascimento), 0), DataNascimento) - DATEDIFF(d, DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0), GETDATE()) = 2
    
    -- Teste
    select DATEDIFF(d, DATEADD(qq, DATEDIFF(qq, 0, cast('1977/03/18' as date)), 0), cast('1977/03/18' as date)) - DATEDIFF(d, DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0), GETDATE())

    É meio louco, mas testei rapidinho e funcionou.

    Se a sua data não possui o ano, a resposta do Willian resolverá.

    Bom trabalho!

    • Marcado como Resposta Xarp2 segunda-feira, 16 de março de 2015 20:59
    segunda-feira, 16 de março de 2015 18:28
  • Faltou informar o sinal de menos para calcular MENOS 2 dias para ser antes do dia do aniversario, Lembrando que também se salvou o aniversario com o ano de nascimento essa select não ira funcionar

    select * from pessoas where datanascimento=DateAdd(day, -2,GetDate());

    Nao... Isso vai mostrar os aniversariantes de dois dias atras (voce subtrai a data de hoje).

    O que ele quer é pegar os aniversariantes de dois dias pra frente (data de hoje mais 2 dias)

    Mas vc tem razao pra o ano.. a forma correta é

    select * from pessoas where datepart(day,datanascimento)=datepart(day,DateAdd(day, 2,GetDate())) and 
    datepart(month,datanascimento)=datepart(month,DateAdd(day, 2,GetDate())) 
    ;

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------




    segunda-feira, 16 de março de 2015 18:29