Problemas com filtragem de data
Olá pessoal, estou com o seguinte problema, eu preciso filtrar clientes que estão de aniversario num intervalo de 3 dias para frente e que passou, tipo Data de hoje - 3 e mais 3.
Criei uma SP para ajudar nesse quesito, não sei se seria a melhor opção, mas enfim, fiz assim:
FOR select C.cdcliente, C.nmcliente, C.dtnascimento, c.nrfone FROM CLIENTE C
where
(EXTRACT(DAY FROM C.DTNASCIMENTO) >= :DIAI AND EXTRACT(MONTH FROM C.DTNASCIMENTO) >= :MESI) AND
(EXTRACT(DAY FROM C.DTNASCIMENTO) <= :DIAF AND EXTRACT(MONTH FROM C.DTNASCIMENTO) <= :MESF)
ORDER BY EXTRACT(MONTH FROM C.DTNASCIMENTO), EXTRACT(DAY FROM C.DTNASCIMENTO)
INTO
:codigo, :nome, :data_nasc, :nrfone
DO
suspend;
Mas confesso que não está funcionando corretamente, nas variaveis DiaI, DiaF, MesI e MesF coloco o dia e o mes correspodente.
Acredito que tenha uma forma melhor de fazer, e espero que alguem possa me ajudar.
Utilizo Firebird 2.5
Até mais
Criei uma SP para ajudar nesse quesito, não sei se seria a melhor opção, mas enfim, fiz assim:
FOR select C.cdcliente, C.nmcliente, C.dtnascimento, c.nrfone FROM CLIENTE C
where
(EXTRACT(DAY FROM C.DTNASCIMENTO) >= :DIAI AND EXTRACT(MONTH FROM C.DTNASCIMENTO) >= :MESI) AND
(EXTRACT(DAY FROM C.DTNASCIMENTO) <= :DIAF AND EXTRACT(MONTH FROM C.DTNASCIMENTO) <= :MESF)
ORDER BY EXTRACT(MONTH FROM C.DTNASCIMENTO), EXTRACT(DAY FROM C.DTNASCIMENTO)
INTO
:codigo, :nome, :data_nasc, :nrfone
DO
suspend;
Mas confesso que não está funcionando corretamente, nas variaveis DiaI, DiaF, MesI e MesF coloco o dia e o mes correspodente.
Acredito que tenha uma forma melhor de fazer, e espero que alguem possa me ajudar.
Utilizo Firebird 2.5
Até mais
Cristiano
Curtidas 0
Respostas
Marisiana Battistella
27/02/2014
Olá Cristiano!
Vê se esse SQL te ajuda...
Vê se esse SQL te ajuda...
select C.cdcliente, C.nmcliente, C.dtnascimento, c.nrfone FROM CLIENTE C
where c.dtnascimento >= (select date_trunc('day', current_date) - INTERVAL '3 day')
and c.dtnascimento <= (select date_trunc('day', current_date) + INTERVAL '3 day')GOSTEI 0
Alex Lekao
27/02/2014
Oi Marisiana,
ainda bem que vc apareceu... rsrsr
eu estava lendo e relendo e nao conseguia me encontrar no script do amigo. rsrsr
acho que estou lento hoje... mais que o normal... kkkk
ainda bem que vc apareceu... rsrsr
eu estava lendo e relendo e nao conseguia me encontrar no script do amigo. rsrsr
acho que estou lento hoje... mais que o normal... kkkk
GOSTEI 0
Cristiano
27/02/2014
Obrigadão Marisiana, mas infelizmente não deu certo, tem algum erro na sintaxe e sempre dá o erro no '3 day', e não consegui encontrar a solução.
Mas olhando pelo código, será que ele vai considerar apenas o dia e o mes para encontrar os aniversariantes do periodo?
Mas olhando pelo código, será que ele vai considerar apenas o dia e o mes para encontrar os aniversariantes do periodo?
GOSTEI 0
Marisiana Battistella
27/02/2014
Oi Alex! =)
Faz parte...
Hoje também to assim, acho que é cansaço...
Faz parte...
Hoje também to assim, acho que é cansaço...
GOSTEI 0
Alex Lekao
27/02/2014
Deve ser viu...
meu Deus...
e eu devo estar ansioso pq nao vou trabalhar na segunda e nem no sabado... rsrsrsr
meu Deus...
e eu devo estar ansioso pq nao vou trabalhar na segunda e nem no sabado... rsrsrsr
GOSTEI 0
Marisiana Battistella
27/02/2014
Obrigadão Marisiana, mas infelizmente não deu certo, tem algum erro na sintaxe e sempre dá o erro no '3 day', e não consegui encontrar a solução.
Mas olhando pelo código, será que ele vai considerar apenas o dia e o mes para encontrar os aniversariantes do periodo?
Mas olhando pelo código, será que ele vai considerar apenas o dia e o mes para encontrar os aniversariantes do periodo?
Ah, foi mal... Eu testei no PostgreSQL... Desculpa, confundi...
Assim ele deve pegar 3 dias antes e 3 dias depois da data atual...
GOSTEI 0
Alex Lekao
27/02/2014
vou ver se instalo o firebird em uma das minhas VMs aqui e restauro uma base para fazer teste...
testar as cegas eh osso... rsrsr
testar as cegas eh osso... rsrsr
GOSTEI 0
Marisiana Battistella
27/02/2014
select addday(current_date, 5) from rdb$database
[url]https://www.devmedia.com.br/imagens/articles/192388/CoelhoFBUDF_2.jpg[/url]
Essa função "addday" pode ser utilizada para adicionar os dias a data atual, porém não estou encontrando uma função ou uma forma de diminuir os dias...
GOSTEI 0
Alex Lekao
27/02/2014
talvez funcione colocando -5.
mas eh so especulação. rsrsr
select addday(current_date, -5) from rdb$database
mas eh so especulação. rsrsr
GOSTEI 0
Marisiana Battistella
27/02/2014
Pois é, pode ser...
Só usei Firebird nas aulas da minha graduação, depois nunca mais...
Mas tento ajudar pela lógica do SQL e pq tem coisas q são comuns em todos os bancos.
Eu acho q não firebird não tem essa função DATE_TRUNC porque eu não encontrei exemplos...
Só usei Firebird nas aulas da minha graduação, depois nunca mais...
Mas tento ajudar pela lógica do SQL e pq tem coisas q são comuns em todos os bancos.
Eu acho q não firebird não tem essa função DATE_TRUNC porque eu não encontrei exemplos...
GOSTEI 0
Alex Lekao
27/02/2014
o Firebird que instalei aqui eh o 1.5
essa funcao nao funcionou nele nao... rsrsr
to pesquisando para ver se consigo alguma coisa...
conseguindo posto aqui... rsrs
essa funcao nao funcionou nele nao... rsrsr
to pesquisando para ver se consigo alguma coisa...
conseguindo posto aqui... rsrs
GOSTEI 0
Alex Lekao
27/02/2014
ela eh para o Firebird 2.0 ou superior... rsrsr
GOSTEI 0
Emerson Nascimento
27/02/2014
tente:
FOR select C.cdcliente, C.nmcliente, C.dtnascimento, c.nrfone
FROM CLIENTE C
where
substring(cast(C.DTNASCIMENTO as varchar(10)) from 6 for 5)
between substring(cast(current_date-3 as varchar(10)) from 6 for 5) and
substring(cast(current_date+3 as varchar(10)) from 6 for 5)
ORDER BY EXTRACT(MONTH FROM C.DTNASCIMENTO), EXTRACT(DAY FROM C.DTNASCIMENTO)
INTO
:codigo, :nome, :data_nasc, :nrfone
DO
suspend;
GOSTEI 0
Marisiana Battistella
27/02/2014
Cristiano, vc conseguiu criar a instrução SQL?
Nossas dicas t ajudaram?
Nossas dicas t ajudaram?
GOSTEI 0