Problema de precisão firebird
Pessoal preciso fazer uma conta no meu select que o resultado pode ser um número de mais de 11 digitos, fazendo sem dar cast em nada ele retorna um erro de estouro de precisão de integer, até ai tudo bem mesmo que a operação está sendo feita entre um int e um decimal e o que deveria prevalecer para o resultado seria o tipo de maior precisão que seria o decimal, mas procurei na net e percebi que o firebird tem esse problema mesmo, então tentei colocar casts de todas a forma até ficar assim como estão vendo em todos os lugares, mas continua dando o abençoado erro de precisão, alguém pode me ajudar, não faz muito tempo que mexo com firebird e agora que estou começando precisar a fazer estatísticas e já enfrentei esse problema, outra forma de me ajudar é me dizer se realmente não tem nada nativo dele que calcule a diferença de datas em minutos, desde já agradeço a todos que responderem.
select
CAST(
CAST(
coalesce(CAST(movimentos_itens_tbl.DATA_HORA_SAIDA-
movimentos_itens_tbl.DATA_HORA_ENTRADA AS NUMERIC(18,8)),0)
AS NUMERIC(18,8)
) *
CAST(86164.09
AS NUMERIC(18,8)
)
AS NUMERIC(18,8)
)
from movimentos_tbl
inner join movimentos_itens_tbl
on movimentos_itens_tbl.id_movimentos = movimentos_tbl.id_movimentos
inner join servicos_tbl
on servicos_tbl.id_servicos = movimentos_tbl.id_servicos
inner join etapas_tbl
on etapas_tbl.ID_ETAPAS = movimentos_itens_tbl.id_etapas
inner join servicos_etapas_tbl
on servicos_etapas_tbl.ID_SERVICOS = servicos_tbl.id_servicos
and SERVICOS_ETAPAS_TBL.id_etapas = ETAPAS_TBL.ID_ETAPAS
inner join usuarios_tbl
on usuarios_tbl.id_usuarios = movimentos_tbl.ID_USUARIOS
select
CAST(
CAST(
coalesce(CAST(movimentos_itens_tbl.DATA_HORA_SAIDA-
movimentos_itens_tbl.DATA_HORA_ENTRADA AS NUMERIC(18,8)),0)
AS NUMERIC(18,8)
) *
CAST(86164.09
AS NUMERIC(18,8)
)
AS NUMERIC(18,8)
)
from movimentos_tbl
inner join movimentos_itens_tbl
on movimentos_itens_tbl.id_movimentos = movimentos_tbl.id_movimentos
inner join servicos_tbl
on servicos_tbl.id_servicos = movimentos_tbl.id_servicos
inner join etapas_tbl
on etapas_tbl.ID_ETAPAS = movimentos_itens_tbl.id_etapas
inner join servicos_etapas_tbl
on servicos_etapas_tbl.ID_SERVICOS = servicos_tbl.id_servicos
and SERVICOS_ETAPAS_TBL.id_etapas = ETAPAS_TBL.ID_ETAPAS
inner join usuarios_tbl
on usuarios_tbl.id_usuarios = movimentos_tbl.ID_USUARIOS
Vinicius Vieira
Curtidas 0
Respostas
Eriley Barbosa
15/10/2010
Veja se o tópico abaixo te ajuda:
http://www.activedelphi.com.br/forum/viewtopic.php?p=266943&sid=8ced71e1ff82a2c869d30862ba01d40e
GOSTEI 0
Emerson Nascimento
15/10/2010
select
(movimentos_itens_tbl.DATA_HORA_SAIDA-movimentos_itens_tbl.DATA_HORA_ENTRADA) intervalo_dias,
(movimentos_itens_tbl.DATA_HORA_SAIDA-movimentos_itens_tbl.DATA_HORA_ENTRADA)*1440/60 intervalo_horas,
(movimentos_itens_tbl.DATA_HORA_SAIDA-movimentos_itens_tbl.DATA_HORA_ENTRADA)*1440 intervalo_minutos
from
movimentos_tbl
inner join movimentos_itens_tbl
on movimentos_itens_tbl.id_movimentos = movimentos_tbl.id_movimentos
inner join servicos_tbl
on servicos_tbl.id_servicos = movimentos_tbl.id_servicos
inner join etapas_tbl
on etapas_tbl.ID_ETAPAS = movimentos_itens_tbl.id_etapas
inner join servicos_etapas_tbl
on servicos_etapas_tbl.ID_SERVICOS = servicos_tbl.id_servicos
and SERVICOS_ETAPAS_TBL.id_etapas = ETAPAS_TBL.ID_ETAPAS
inner join usuarios_tbl
on usuarios_tbl.id_usuarios = movimentos_tbl.ID_USUARIOS
(movimentos_itens_tbl.DATA_HORA_SAIDA-movimentos_itens_tbl.DATA_HORA_ENTRADA) intervalo_dias,
(movimentos_itens_tbl.DATA_HORA_SAIDA-movimentos_itens_tbl.DATA_HORA_ENTRADA)*1440/60 intervalo_horas,
(movimentos_itens_tbl.DATA_HORA_SAIDA-movimentos_itens_tbl.DATA_HORA_ENTRADA)*1440 intervalo_minutos
from
movimentos_tbl
inner join movimentos_itens_tbl
on movimentos_itens_tbl.id_movimentos = movimentos_tbl.id_movimentos
inner join servicos_tbl
on servicos_tbl.id_servicos = movimentos_tbl.id_servicos
inner join etapas_tbl
on etapas_tbl.ID_ETAPAS = movimentos_itens_tbl.id_etapas
inner join servicos_etapas_tbl
on servicos_etapas_tbl.ID_SERVICOS = servicos_tbl.id_servicos
and SERVICOS_ETAPAS_TBL.id_etapas = ETAPAS_TBL.ID_ETAPAS
inner join usuarios_tbl
on usuarios_tbl.id_usuarios = movimentos_tbl.ID_USUARIOS
GOSTEI 0
Vinicius Vieira
15/10/2010
Obrigado pelas respostas pessoal;
GOSTEI 0