Fórum Filtrando Datas através do Dia/Mes em SQL #292887
24/08/2005
0
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
Curtir tópico
+ 0Posts
24/08/2005
Wilson Brito
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
24/08/2005
Netcrusher
Gostei + 0
24/08/2005
Wilson Brito
(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
24/08/2005
Rjun
Gostei + 0
24/08/2005
Rjun
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
Clique aqui para fazer login e interagir na Comunidade :)