Ordenando Aniversariantes - SQL Server
Boa noite!
sou iniciante no mundo da programação, comecei a estudar SQL ontem, e hoje já preciso fazer um SELECT "complicado" para meus conhecimentos.
Tenho um Banco de dados SQL Server com campos: Nome e Data Nascimento.
Preciso ordenar pela Data Nascimento, sendo a ordem da data mais próxima para a data mais distante, a intenção nesse ordenamento é saber os próximos aniversariantes até o próximo ano (tendo como base a data atual), os que já fizeram aniversário serão os primeiros da lista.
Já tentei alguns SELECTs, porém todos ordenam considerando o Ano de nascimento.
Select * from TabelaX ORDER By Aniversario DESC ou ASC
Select * from TabelaX ORDER BY DAY(Aniversario), MONTH(Aniversario)
Select * from TabelaX ORDER By datediff(month,getdate(), Aniversario) ASC ou DESC
Agradeço antecipadamente pela ajuda.
sou iniciante no mundo da programação, comecei a estudar SQL ontem, e hoje já preciso fazer um SELECT "complicado" para meus conhecimentos.
Tenho um Banco de dados SQL Server com campos: Nome e Data Nascimento.
Preciso ordenar pela Data Nascimento, sendo a ordem da data mais próxima para a data mais distante, a intenção nesse ordenamento é saber os próximos aniversariantes até o próximo ano (tendo como base a data atual), os que já fizeram aniversário serão os primeiros da lista.
Já tentei alguns SELECTs, porém todos ordenam considerando o Ano de nascimento.
Select * from TabelaX ORDER By Aniversario DESC ou ASC
Select * from TabelaX ORDER BY DAY(Aniversario), MONTH(Aniversario)
Select * from TabelaX ORDER By datediff(month,getdate(), Aniversario) ASC ou DESC
Agradeço antecipadamente pela ajuda.
Fabio Gomez
Curtidas 0
Respostas
Luiz Santos
07/06/2020
Boa noite Fabio
Pode desconsiderar os períodos que já passaram?
Tipo o cara fez aniversário em Março/2020, em teoria só poderia fazer em Março/2021.
Vou presumir que sim...
Faça assim:
Pode desconsiderar os períodos que já passaram?
Tipo o cara fez aniversário em Março/2020, em teoria só poderia fazer em Março/2021.
Vou presumir que sim...
Faça assim:
Select campo1 , campo2 , campoN , aniversario , year(getdate())*100000+month(aniversario)*100+day(aniversario) as dtref from TabelaX Where year(getdate())*100000+month(aniversario)*100+day(aniversario) >= convert(char8), getdate(),112) ORDER By 5 ASC
GOSTEI 0
Luiz Santos
07/06/2020
Só uma observação, na pressa eu coloquei 100000 é na verdade 10000.
Abs
Abs
GOSTEI 0
Fabio Gomez
07/06/2020
Só uma observação, na pressa eu coloquei 100000 é na verdade 10000.
Abs
Abs
Fala Luiz,
primeiramente muito obrigado por ter respondido.
Então, preciso mostrar os que já fizeram aniversário, ou seja, eles seriam os primeiros da fila, pois faltariam menos dias para o próximo aniversario.
GOSTEI 0
Emerson Nascimento
07/06/2020
tente assim:
select * from TabelaX ORDER By convert(varchar(5), Aniversario, 110)
GOSTEI 0
Fabio Gomez
07/06/2020
tente assim:
select * from TabelaX ORDER By convert(varchar(5), Aniversario, 110)
Olá Emerson,
obrigado por responder.
Como disse, sou iniciante, não entendi a lógica aplicada nessa situação. O resultado da ordenação não foi o esperado.
Grato.
GOSTEI 0
Luiz Santos
07/06/2020
Fabio.
Veja o exemplo que fiz.
Se quiser trazer os que já fizeram, troque o sinal de maior por menor.
Se quiser trazer todos, tire o WHERE.
Veja o exemplo que fiz.
Se quiser trazer os que já fizeram, troque o sinal de maior por menor.
Se quiser trazer todos, tire o WHERE.
DECLARE @ANIVERSARIO TABLE( NOME VARCHAR(50), ANIVERSARIO DATE ) BEGIN INSERT INTO @ANIVERSARIO VALUES ('PESSOA1','1978-08-28'), ('PESSOA2','1980-03-04'), ('PESSOA3','1982-01-11'), ('PESSOA4','1984-06-01'), ('PESSOA5','1950-12-07') SELECT NOME , ANIVERSARIO , YEAR(GETDATE())*10000+MONTH(ANIVERSARIO)*100+DAY(ANIVERSARIO) AS DTREF FROM @ANIVERSARIO WHERE YEAR(GETDATE())*10000+MONTH(ANIVERSARIO)*100+DAY(ANIVERSARIO) > CONVERT(CHAR(8),GETDATE(),112) ORDER BY 3 END
GOSTEI 0
Fabio Gomez
07/06/2020
Fabio.
Veja o exemplo que fiz.
Se quiser trazer os que já fizeram, troque o sinal de maior por menor.
Se quiser trazer todos, tire o WHERE.
Veja o exemplo que fiz.
Se quiser trazer os que já fizeram, troque o sinal de maior por menor.
Se quiser trazer todos, tire o WHERE.
DECLARE @ANIVERSARIO TABLE( NOME VARCHAR(50), ANIVERSARIO DATE ) BEGIN INSERT INTO @ANIVERSARIO VALUES ('PESSOA1','1978-08-28'), ('PESSOA2','1980-03-04'), ('PESSOA3','1982-01-11'), ('PESSOA4','1984-06-01'), ('PESSOA5','1950-12-07') SELECT NOME , ANIVERSARIO , YEAR(GETDATE())*10000+MONTH(ANIVERSARIO)*100+DAY(ANIVERSARIO) AS DTREF FROM @ANIVERSARIO WHERE YEAR(GETDATE())*10000+MONTH(ANIVERSARIO)*100+DAY(ANIVERSARIO) > CONVERT(CHAR(8),GETDATE(),112) ORDER BY 3 END
Luiz,
obrigado pela resposta.
Vou adaptar meu código C# e testar, pois como não estava conseguindo fazer esse processo com SQL, segui pelo C#.
Grato
GOSTEI 0