SQL - Consultar Datas de Aniversário e Coloar em Ordem

Delphi

27/04/2004

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

Shaolin

Curtidas 0

Melhor post

Shaolin

Shaolin

27/04/2004

Eu utilizo as tabelas do Paradox.


GOSTEI 1

Mais Respostas

Marco Salles

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:
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;
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


GOSTEI 1
Marco Salles

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

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.


GOSTEI 0
Marco Salles

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

Shaolin

27/04/2004

Vou fazer o teste e logo retorno o resultado !!! :oops:


GOSTEI 0
POSTAR