extrair data de um campo datetime

22/10/2004

76

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


Responder

Posts

22/10/2004

Gandalf.nho

Use um CAST(campo_data AS DATE)


Responder

22/10/2004

Livia

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


Responder

22/10/2004

Gandalf.nho

Coloque sua consulta aí


Responder

22/10/2004

Livia

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


Responder

22/10/2004

Gandalf.nho

É 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.


Responder

22/10/2004

Livia

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


Responder

22/10/2004

Gandalf.nho

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


Responder

22/10/2004

Livia

Eu tentei fazer isso mas dá erro token unknown


Responder

22/10/2004

Gandalf.nho

Qual seu banco de dados e a versão?


Responder

22/10/2004

Livia

Interbase 6


Responder

22/10/2004

Gandalf.nho

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.


Responder

26/04/2019

Pedro Lima

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.
Responder

30/08/2019

Vicente Santos

Use um CAST(campo_data AS DATE)


show !
Responder