Filtrando Datas através do Dia/Mes em SQL

Delphi

24/08/2005

Como vai a todos?

Estou com um problema de filtragem de datas. O problema é o seguinte:

Possuo um atributo em uma tabela (Funcionários) e dentro dela existe um atributo chamado FUN_DATA_NASC, que armazena a data de nascimento do funcionário.
Através deste atributo, preciso filtrar entre uma data inicial(DIA e MES) e uma data final (DIA e MES).

Por Exemplo, tenho os seguintes registros:

12/01/1984
14/02/1985
12/03/1987
18/04/1987


Agora preciso filtrar somente através do DIA e MES (de qualquer ano).

Por exemplo: Quero filtrar todos os funcionários que nasceram do dia 01/01 até dia 20/03 (de qualquer ano).

RESULTADO:

12/01
14/02
12/03


Não sei se vcs entenderam. Quero fazer uma consulta de aniversariantes entre DIA e MES inicial e final de qualquer ano.

Eu poderia muito bem fazer uma gambiarra de salvar em um atributo o dia e mes +2005 (12/01/2005), facilitando a busca.
SELECT * FROM FUNCIONARIO
WHERE FUN_DATA_NASC BETWEEN ´01/01/2005´ AND ´20/01/2005´

Porém, isso é gambi.. :(

Alguém saberia uma solução?

Eu sei que existe uma função do sql do tipo FormatDate (máscara), mas eu não sei o nome e nem como se utiliza esta função.

Um abraço a todos,

NetCrusher


Netcrusher

Netcrusher

Curtidas 0

Respostas

Wilson Brito

Wilson Brito

24/08/2005

Query.Close;
Query.SQL.Clear;
Query.SQL.Add(´select * from Cliente´);
Query.SQL.Add(´where extract(day from DataNasc) = :Dia And extract(month from DataNasc) = :Mes´);
Query.ParamByName(´Dia´).AsInteger := StrToInt(EdtDia.Text);
Query.ParamByName(´Mes´).AsInteger := StrToInt(EdtMes.Text);
Query.Open;


GOSTEI 0
Netcrusher

Netcrusher

24/08/2005

como posso usar o Between com extract?


GOSTEI 0
Wilson Brito

Wilson Brito

24/08/2005

select * from Clientes where
(extract(day from nascimento) >= :Dia1 And extract(month from nascimento) >= :Mes1)
and
(extract(day from nascimento) <= :Dia2 And extract(month from nascimento) <= :Mes2)


GOSTEI 0
Rjun

Rjun

24/08/2005

Qual banco de dados você esta usando?


GOSTEI 0
Rjun

Rjun

24/08/2005

Fiz o código abaixo utilizando SQL Server.

SELECT *
FROM
  Cliente
WHERE
  (
  CASE 
    WHEN MONTH(DATA_NASCIMENTO) <= 9  THEN ´0´ + CAST(MONTH(DATA_NASCIMENTO) AS VARCHAR)
    WHEN MONTH(DATA_NASCIMENTO) >= 10 THEN CAST(MONTH(DATA_NASCIMENTO) AS VARCHAR)
  END +
  CASE
    WHEN DAY(DATA_NASCIMENTO) <= 9  THEN ´0´ + CAST(DAY(DATA_NASCIMENTO) AS VARCHAR)
    WHEN DAY(DATA_NASCIMENTO) >= 10 THEN CAST(DAY(DATA_NASCIMENTO) AS VARCHAR)
  END
  ) 
  BETWEEN :Data1 AND :Data2


Note que você deve passar os parâmetros no padrão MMDD para que a comparação seja correta. Outra coisa, as datas precisam estar no mesmo ano, ou seja, você não pode passar uma pesquisa de 01/10 a 10/02.


GOSTEI 0
POSTAR