extrair data de um campo datetime

Firebird

22/10/2004

Olá!
Gostaria de saber se tem como extrair uma data de um campo datetime, por exemplo, uma das condições na cláusula where é tabcaixa.datahoraf between ´2004-10-01´ and ´2004-10-20´, onde o campo tabcaixa.datahoraf é por exemplo 19/10/2004 15:02:25.
Pois preciso somar o vlr de um determinado campo quando a data estiver nesse intervalo, porém preciso somente da data...

Obrigada
Livia


Livia

Livia

Curtidas 1

Respostas

Gandalf.nho

Gandalf.nho

22/10/2004

Use um CAST(campo_data AS DATE)


GOSTEI 0
Livia

Livia

22/10/2004

Obrigada gandalf.nho..era isso mesmo!
Só que esqueci de um detalhe...Como estou usando uma função agregada, preciso dar um group by. E aparece duas repetidas pois seleciono o campo datahoraf p/ mostrar a data e os valores daquela data, coloquei o cast no select e a data aparece do jeito q queria, mas como uso o group by ele aparece duas vezes. Como faço p/ agrupar considerando apenas a data?

Livia


GOSTEI 0
Gandalf.nho

Gandalf.nho

22/10/2004

Coloque sua consulta aí


GOSTEI 0
Livia

Livia

22/10/2004

SELECT cast(Tabcaixa.DATAHORAF as date), sum(Tabkardp.ULT_CUSTO_COR*quant) as custo ,
(select sum(prevenda.VLRTOTAL)
from tab_prevenda prevenda,tabcaixa c,tabmovcaixa m
where
(prevenda.COD_EMP = c.COD_EMP)
AND (c.DATAHORAA = m.DATAHORAA)
AND (c.DATAHORAF IS NOT NULL)
AND (m.ORIGEM = ´PVC´)
AND (prevenda.SITUAC = ´4´)
AND (prevenda.COD_INT = Tab_prevenda.cod_int) and prevenda.cod_int=m.numdoc
)as total
FROM TABCAIXA Tabcaixa, TABMOVCAIXA Tabmovcaixa, TAB_PREVENDA Tab_prevenda, TABKARDP Tabkardp
WHERE (Tab_prevenda.COD_EMP = Tabcaixa.COD_EMP)
AND (Tabcaixa.COD_EMP = Tabmovcaixa.COD_EMP)
AND (Tab_prevenda.COD_EMP = Tabkardp.COD_EMP) and cast(tabcaixa.datahoraf as date)between ´2004-10-01´ and ´2004-10-19´
AND (Tabcaixa.DATAHORAA = Tabmovcaixa.DATAHORAA)
AND (Tabcaixa.DATAHORAF IS NOT NULL)
AND (Tabmovcaixa.ORIGEM = ´PVC´)
AND (Tab_prevenda.SITUAC = ´4´)
AND (Tab_prevenda.COD_INT = Tabmovcaixa.NUMDOC)
AND (Tabkardp.HISTORICO = 15)
AND (Tabkardp.NUMDOC = Tab_prevenda.cod_int )
group by tabcaixa.datahoraf


GOSTEI 0
Gandalf.nho

Gandalf.nho

22/10/2004

É que você está agrupando pelo campo data, mas mostrando o campo via CAST. Se você usa Firebird, pode dar um GROUP BY no campo sendo tratado pelo CAST.


GOSTEI 0
Livia

Livia

22/10/2004

Seria
group by cast(tabcaixa.datahoraf as date)???


GOSTEI 0
Gandalf.nho

Gandalf.nho

22/10/2004

Use a posição do campo na lista. No seu caso, GROUP BY 1


GOSTEI 0
Livia

Livia

22/10/2004

Eu tentei fazer isso mas dá erro token unknown


GOSTEI 0
Gandalf.nho

Gandalf.nho

22/10/2004

Qual seu banco de dados e a versão?


GOSTEI 0
Livia

Livia

22/10/2004

Interbase 6


GOSTEI 0
Gandalf.nho

Gandalf.nho

22/10/2004

Aí está o problema, o Interbase não aceita GROUP BY em função. Uma sugestão seria migrar para o Firebird que permite isso, outra seria tentar montar uma view fazendo o CAST no campo e depois montar a SQL em cima dessa view, ao invés da tabela.


GOSTEI 0
Pedro Lima

Pedro Lima

22/10/2004

Use um CAST(campo_data AS DATE)


Muito Obrigado amigo, sua resposta foi simples e objetiva, pesquisei durante 3h sem sucesso, li sua resposta e consegui resolver um problema no meu programa. Só um adendo, no meu caso, meu programa executava a query e no CAST existia um espaço entre a palavra CAST e o parênteses, dessa forma CAST (campo_datetime AS DATE), quebrei a cabeça quando apaguei o espaço dessa forma: CAST(campo_dateime AS DATE) consegui executa a pesquisa. Sei que é um erro bem bobo, porém pode ajudar quem esteja na mesma situação. Mais uma vez obrigado pela ajuda. Abraços.
GOSTEI 0
Vicente Santos

Vicente Santos

22/10/2004

Use um CAST(campo_data AS DATE)


show !
GOSTEI 0
POSTAR