SQL - Consultar Datas de Aniversário e Coloar em Ordem
Galera
Tenho uma tabela com uma porrada de registro, é um cadastro de funcionários, agora tenho que fazer uma listagem dos aniversariantes do mes, só que eles querem que eu coloque por ordem do DIA do aniversário. Se eu colocar ORDER BY DataNasc, ele não vai colocar nesta maneira, tenho como fazer isto sem ter que criar um novo campo na tabela ???
Aguardo a colaboração da galera.
Tenho uma tabela com uma porrada de registro, é um cadastro de funcionários, agora tenho que fazer uma listagem dos aniversariantes do mes, só que eles querem que eu coloque por ordem do DIA do aniversário. Se eu colocar ORDER BY DataNasc, ele não vai colocar nesta maneira, tenho como fazer isto sem ter que criar um novo campo na tabela ???
Aguardo a colaboração da galera.
Shaolin
Curtidas 0
Melhor post
Shaolin
27/04/2004
Eu utilizo as tabelas do Paradox.
GOSTEI 1
Mais Respostas
Marco Salles
27/04/2004
[b:f309e241e9]Voce não disse qual o banco que voce usa[/b:f309e241e9] :?: :?: ...Existe uma instução extract Month que não se aplica em todos os bancos..ela poderia facilitar a sua vida....[b:f309e241e9]Fica destacado esta opção[/b:f309e241e9]...A Outra sugestao que lhe dou, e fazer uma pesquisa por inicio e final de mes Atual e finalmente [b:f309e241e9]ordenar[/b:f309e241e9] pela [b:f309e241e9]dataNasc[/b:f309e241e9] seguindo pelo [b:f309e241e9]nome[/b:f309e241e9] alfabetico..Ela e mais complicada mas deve funcionar...Para isto voce deve descobrir :idea: :idea: a data inicial e final de cada mes...eu não sei :?: :?: se na uses datautils existe uma função que retorne o primeiro e ultimo dia de uma determinada data...Mas isto não é problema :P :P , nada que a função abaixo não possa resolver:
obs:Que eu não estou preocupando com o ano bissesto...Porque quem nasce em anos bissestos comemoram a data de nascimento ou no dia 28 ou no dia 01...[b:f309e241e9]Mas atenção [/b:f309e241e9]...Na hora de fazer o cadastro com a data de nascimento deve colocar no banco a data de aniversário...Isto nao e um erro no processo Atual que eu estou te passando , [b:f309e241e9]isto independe do método[/b:f309e241e9] e é um alerta....Para resolver isto deforma exata precissa de mais códigos, que não estou colocando aqui
[b:f309e241e9]Finalmente nossa pesquisa sql :[/b:f309e241e9]
var
InicioMes,FinalMes:TDate;
begin
end;
Se Não entendeu Poste Para gente...A gente com maior prazer perde um tempinho nas colocações e o minimo que a gente que saber se a pessoa entendeu,não entendeu, não concorda, deu certo , deu errado etcc...Sem estas colocações como poderemos ajudar as outras pessoas :P
function IrFinalMes(Mes:word):Word; begin if (mes=1)or(mes=3)or(mes=5)or(mes=7)or(mes=8)or(mes=10)or(mes=12) then begin result:=31; exit; end; if (mes=4)or(mes=6)or(mes=9)or(mes=11) then begin result:=30; exit; end; if mes=2 then result:=28; end;
obs:Que eu não estou preocupando com o ano bissesto...Porque quem nasce em anos bissestos comemoram a data de nascimento ou no dia 28 ou no dia 01...[b:f309e241e9]Mas atenção [/b:f309e241e9]...Na hora de fazer o cadastro com a data de nascimento deve colocar no banco a data de aniversário...Isto nao e um erro no processo Atual que eu estou te passando , [b:f309e241e9]isto independe do método[/b:f309e241e9] e é um alerta....Para resolver isto deforma exata precissa de mais códigos, que não estou colocando aqui
[b:f309e241e9]Finalmente nossa pesquisa sql :[/b:f309e241e9]
var
InicioMes,FinalMes:TDate;
begin
DecodeDate(Date,ano,mes,dia); dia:=IrFinalMes(mes); InicioMes:=Encodedate(ano,mes,01); Finalmes:=EncodeDate(Ano,mes,dia); query1.close; query1.sql.clear; query1.sql.add(´Select *From NomeDaTabela´); query1.sql.add(´Where DataNasc>=:DataInicial´) query1.ParamByName(´DataInicil´).AsDateTime:=Iniciomes; query1.sql.add(´and DataNasc<=:DataFinal´) query1.ParamByName(´DataFinal´).AsDateTime:=FinalMes; query1.sql.Add(´order by DataNasc,Nome´); query1.Prepare; query1.open;
Se Não entendeu Poste Para gente...A gente com maior prazer perde um tempinho nas colocações e o minimo que a gente que saber se a pessoa entendeu,não entendeu, não concorda, deu certo , deu errado etcc...Sem estas colocações como poderemos ajudar as outras pessoas :P
GOSTEI 1
Marco Salles
27/04/2004
Então o extract Month não é suportado por este Banco...Então tem que Fazer a Rotina que Lhe Passei ...Tem alguma dúvida nela :?: :?:
GOSTEI 0
Shaolin
27/04/2004
O comando que eu utilizo é:
SELECT * FROM Cadastro WHERE EXTRACT(Month From DataNasc)=´+IntToStr(CB_Mes.Tag)
Estava revisando o teu código, acabei não testando, mas notei que ele vai parametrizar duas datas, terei que informar o ano em todas as pesquisas. Mas de qualquer forma, valeu a dica. Tentei outra vez fazer assim:
SELECT * FROM Cadastro WHERE EXTRACT(Month From DataNasc)=8 ORDER BY EXTRACT(Day From DataNasc)
Mas ai não deu certo.
SELECT * FROM Cadastro WHERE EXTRACT(Month From DataNasc)=´+IntToStr(CB_Mes.Tag)
Estava revisando o teu código, acabei não testando, mas notei que ele vai parametrizar duas datas, terei que informar o ano em todas as pesquisas. Mas de qualquer forma, valeu a dica. Tentei outra vez fazer assim:
SELECT * FROM Cadastro WHERE EXTRACT(Month From DataNasc)=8 ORDER BY EXTRACT(Day From DataNasc)
Mas ai não deu certo.
GOSTEI 0
Marco Salles
27/04/2004
Eu utilizo as tabelas do Paradox.
O comando que eu utilizo é:
SELECT * FROM Cadastro WHERE EXTRACT(Month From DataNasc)=´+IntToStr(CB_Mes.Tag)
99,99¬ eu acho que o Extract Month não é suportado pelo Paradox...
terei que informar o ano em todas as pesquisas.
Não...A Consulta sql que lhe passei fornece os [b:99eaf3ef9a]aniversariantes do mes atual....Date[/b:99eaf3ef9a].e não todos os aniversariantes agrupados mes a mes...Porque veja bem , Parece que voce pediu aniversariantes do mes:
[b:99eaf3ef9a]agora tenho que fazer uma listagem dos aniversariantes do mes[/b:99eaf3ef9a]
foi isto que eu passei para voce...Agora:
[b:99eaf3ef9a]Estava revisando o teu código, acabei não testando[/b:99eaf3ef9a]
Pois deveria...GOSTEI 0
Shaolin
27/04/2004
Vou fazer o teste e logo retorno o resultado !!! :oops:
GOSTEI 0