none
Ajuda com Select Aniversariantes RRS feed

  • Pergunta

  • pessoal, tenho uma tabela de aniversariantes,

    qdo for sexta-feira, o sistema mostra os aniversariantes da Sexta, Sabado e Domingo,

    Até ai tudo bem!, porem hoje (30/04/2010) esta mostrando desta forma

    Dia Mes Nome
    1    4     MARIA AUGUSTA CORDEIRO DE LIMA 
    1    4     NASSER CAVALCANTE HIJAZI 
    2    4     ANTONIO FEITOSA DE ARAUJO 
    2    4     GERALDA PEREIRA DE ALMEIDA 
    2    4     JOYCE STEPHANY AMARAL RAMOS 
    2    4     MARCELO RODRIGO ZAYAT 
    2    4     RAIMUNDO ALBERI DE LIMA 
    2    4     SIMEJORGE JESUS MAIA 
    30  4     MARCIA FERREIRA COSTA  
    30  4     ROSELI MARIA MENDES 
    30  4     WALDIRCLEY LOPES GALVÃO 

    minha Instrução eh esta:

    DECLARE @DAY INT, @MONTH INT
    SET @DAY = DAY(GETDATE())
    SET @MONTH = MONTH(GETDATE())

    SELECT DAY(s.dtnasc)AS dtnasc,MONTH(S.dtnasc) AS Mes,s.Nome,m.MunDesc AS Municipio
    FROM SERVIDOR s inner join Municipio m
    ON s.muncod = m.muncod
    WHERE Month(s.dtnasc) =   @MONTH
    AND DAY(s.dtnasc) IN (@DAY , (SELECT DAY(DATEADD(day,1,getdate()))), (SELECT DAY(DATEADD(day,2,getdate()))))
    AND s.Situacao = 1
    ORDER BY Day(s.dtnasc),MONTH(S.dtnasc),s.Nome

    como faço para resolver este problema, uso SQL2005


    Maricelmo
    sexta-feira, 30 de abril de 2010 14:21

Respostas

  • Olá Maricelmo, como vai?

    Cara, o seu problema está sendo na variavel @MONTH que está pegando o mes atual e no seu caso você tem que pegar o próximo mês. Portanto o que você tem que fazer é uma condição dizendo que se a variavel DAY for maior que 28 (por causa do mes de fevereiro) você deve usar outra variavel que pegue o mes + 1 para que ele possa ir para o proximo mes.

    Ve se deu pra entender?

    Abraços


    Clayton Santos
    clayton1745@gmail.com
    http://clayton1745.spaces.live.com
    http://www.blogdoclayton.blog.com.es
    • Marcado como Resposta Maricelmo sexta-feira, 30 de abril de 2010 15:23
    sexta-feira, 30 de abril de 2010 14:37

Todas as Respostas

  • Olá Maricelmo, como vai?

    Cara, o seu problema está sendo na variavel @MONTH que está pegando o mes atual e no seu caso você tem que pegar o próximo mês. Portanto o que você tem que fazer é uma condição dizendo que se a variavel DAY for maior que 28 (por causa do mes de fevereiro) você deve usar outra variavel que pegue o mes + 1 para que ele possa ir para o proximo mes.

    Ve se deu pra entender?

    Abraços


    Clayton Santos
    clayton1745@gmail.com
    http://clayton1745.spaces.live.com
    http://www.blogdoclayton.blog.com.es
    • Marcado como Resposta Maricelmo sexta-feira, 30 de abril de 2010 15:23
    sexta-feira, 30 de abril de 2010 14:37
  • Ola, Clayton

    Obrigado por sua ajuda, entendi o que vc quis dizer.

    porem hoje (30/04/2010) eu preciso mostrar os

    aniversariantes de Hoje (30/04/2010) mais os

    aniversariantes do dia de amanha (01/05/2010) e

    tambem os aniversariantes de depois de amanha (02/05/2010).

    Como Faço?


    Maricelmo
    sexta-feira, 30 de abril de 2010 14:46
  • Oi Maricelmo,

    Acho que se você alterar "order by" vai funcionar

    ORDER BY s.dtnasc,s.Nome

    Boa sorte,


    Latino
    sexta-feira, 30 de abril de 2010 14:49
  • pessoal, consegui resolver

    Eis ai a Instrução, caso alguem tenha

    este mesmo problema.

     

    SELECT DAY(s.dtnasc)AS dtnasc,MONTH(S.dtnasc) AS Mes,s.Nome,m.MunDesc AS Municipio
    FROM SERVIDOR s inner join Municipio m
    ON s.muncod = m.muncod
    WHERE Month(s.dtnasc) = @MONTH
    AND DAY(s.dtnasc) = @DAY
    AND s.Situacao = 1
    --ORDER BY Day(s.dtnasc),MONTH(S.dtnasc),s.Nome
    UNION ALL
    SELECT DAY(s.dtnasc)AS dtnasc,MONTH(S.dtnasc) AS Mes,s.Nome,m.MunDesc AS Municipio
    FROM SERVIDOR s inner join Municipio m
    ON s.muncod = m.muncod
    WHERE Month(s.dtnasc) = @MONTH + 1
    AND DAY(s.dtnasc) IN ((SELECT DAY(DATEADD(day,1,getdate()))), (SELECT DAY(DATEADD(day,2,getdate()))))
    AND s.Situacao = 1
    ORDER BY MONTH(S.dtnasc), Day(s.dtnasc),s.Nome


    Maricelmo
    sexta-feira, 30 de abril de 2010 15:26
  • Maricelmo

    Teste este script, é um pouco mais complicado de se entender...

    SELECT DAY(s.dtnasc)AS dtnasc,MONTH(S.dtnasc) AS Mes,s.Nome,m.MunDesc AS Municipio
    FROM SERVIDOR s inner join Municipio m
    ON s.muncod = m.muncod
    where convert(datetime,'1900'+right('00'+cast(month(s.dtnasc) as varchar),2)+right('00'+cast(day(s.dtnasc) as varchar),2),103) 
        between 
          convert(datetime,'1900'+right('00'+cast(month(GETDATE()) as varchar),2)+right('00'+cast(day(GETDATE()) as varchar),2),103)
        and
          case when DATEPART(weekday,GETDATE())=6 then
            convert(datetime,'1900'+right('00'+cast(month(GETDATE()) as varchar),2)+right('00'+cast(day(GETDATE()) as varchar),2),103)+2
          else
            convert(datetime,'1900'+right('00'+cast(month(GETDATE()) as varchar),2)+right('00'+cast(day(GETDATE()) as varchar),2),103)
          end
      AND s.Situacao = 1
    ORDER BY s.dtnasc,s.Nome

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    sexta-feira, 30 de abril de 2010 15:28
    Moderador
  • Maricelmo, se quiser colocar em um único select sem parametros segue a instrução.

    SELECT 
     DAY(s.dtnasc) AS dtnasc,
     MONTH(S.dtnasc) AS Mes,
     s.Nome,
     m.MunDesc AS Municipio
    FROM 
     SERVIDOR AS s inner join 
     Municipio AS m ON s.muncod = m.muncod
    WHERE 
     DATEADD(YY,DATEDIFF(YY,s.DtNasc,getdate()),s.DtNasc) 
     BETWEEN 
     DATEADD(dd, DATEDIFF(dd, 0, GETDATE()) , 0) 
    AND DATEADD(DD,(CASE DATEPART(W,getdate()) WHEN 6 THEN 2 ELSE 0 END), GETDATE())
     AND s.Situacao = 1

    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    sexta-feira, 30 de abril de 2010 15:47
  • pessoal, consegui resolver

    Eis ai a Instrução, caso alguem tenha

    este mesmo problema.

     

    SELECT DAY(s.dtnasc)AS dtnasc,MONTH(S.dtnasc) AS Mes,s.Nome,m.MunDesc AS Municipio
    FROM SERVIDOR s inner join Municipio m
    ON s.muncod = m.muncod
    WHERE Month(s.dtnasc) = @MONTH
    AND DAY(s.dtnasc) = @DAY
    AND s.Situacao = 1
    --ORDER BY Day(s.dtnasc),MONTH(S.dtnasc),s.Nome
    UNION ALL
    SELECT DAY(s.dtnasc)AS dtnasc,MONTH(S.dtnasc) AS Mes,s.Nome,m.MunDesc AS Municipio
    FROM SERVIDOR s inner join Municipio m
    ON s.muncod = m.muncod
    WHERE Month(s.dtnasc) = @MONTH + 1
    AND DAY(s.dtnasc) IN ((SELECT DAY(DATEADD(day,1,getdate()))), (SELECT DAY(DATEADD(day,2,getdate()))))
    AND s.Situacao = 1
    ORDER BY MONTH(S.dtnasc), Day(s.dtnasc),s.Nome


    Maricelmo


    Maricelmo,

    Acredito que seu script tem um outro problema.... na segunda feira ele vai exibir os aniversariantes de segunda dia 03/05 e do dia 3/06 e 4/06 do mes 06, não sei se esta é sua intenção.....


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    sexta-feira, 30 de abril de 2010 16:49
    Moderador