Duvida SQL
Galera estou com uma duvida, gostaria de saber se é possivel fazer o seguinte:
estou montando um sql onde eu divido 2 valores, e gostaria que o retorno fosse em float.
EX:
select (it_qtde/it_qtde_cx) from itens_lista
bom com este exemplo se a expresão ficar 25/3 o select me retorna apenas 8, quando na verdade deveria ser 8.33.
outro exemplo é se o valor for 3/25 o select me retorna 0 e eu gostaria que ele retorna-se 0.12, alguem pode me ajudar? Valeu!
estou montando um sql onde eu divido 2 valores, e gostaria que o retorno fosse em float.
EX:
select (it_qtde/it_qtde_cx) from itens_lista
bom com este exemplo se a expresão ficar 25/3 o select me retorna apenas 8, quando na verdade deveria ser 8.33.
outro exemplo é se o valor for 3/25 o select me retorna 0 e eu gostaria que ele retorna-se 0.12, alguem pode me ajudar? Valeu!
Shakall
Curtidas 0
Respostas
Sillier
26/08/2007
olá shakall,
tente fazer um cast numeric (15,2) para retornar o valor formato como quer.
isso deve resolver seu problema!
qualquer coisa posta aew..
[]´s
tente fazer um cast numeric (15,2) para retornar o valor formato como quer.
isso deve resolver seu problema!
qualquer coisa posta aew..
[]´s
GOSTEI 0
Shakall
26/08/2007
olá shakall,
tente fazer um cast numeric (15,2) para retornar o valor formato como quer.
isso deve resolver seu problema!
qualquer coisa posta aew..
[]´s
Amigo valeu pela ajuda, fiz o que vc me disse meu sql ficou assim
select p.pro_nome, p.pro_qtde_cx, il.ite_qtde,(cast((il.ite_qtde/p.pro_qtde_cx)as numeric(15,2)))
from itens_lista il, produtos p
where il.list_cod=1 and il.pro_cod=p.pro_cod
bom o valor do expresão ficou desta forma (cast((5/25)as numeric(15,2)))
o resultado foi 0.00, hehe quase chegamos lah mas o resultado correto seria 0.2
Banco de dados utilizado: Firebird
GOSTEI 0
Emerson Nascimento
26/08/2007
select (it_qtde/ cast(it_qtde_cx as numeric(15,3))) from itens_lista
GOSTEI 0
Shakall
26/08/2007
valeu deu certinho, agora mais uma duvida existe alguma função pronto no firebird para round,trunc? ou algum meio de fazer isso?
to querendo assim, se o valor retornado for 0.5 ele deixa 1, se for 0.3 ele deixa 1, ou seja arredondar sem pra cima, agora caso o resultado fir 1 ou 2 numero redondo ai ele nem mexe, deixa do jeito que estar. neste caso acho melhor fazer um procedure neh? pelo fato de que vou ter que trabalhar com IF, ou tem como montar um sql pra fazer isso?
to querendo assim, se o valor retornado for 0.5 ele deixa 1, se for 0.3 ele deixa 1, ou seja arredondar sem pra cima, agora caso o resultado fir 1 ou 2 numero redondo ai ele nem mexe, deixa do jeito que estar. neste caso acho melhor fazer um procedure neh? pelo fato de que vou ter que trabalhar com IF, ou tem como montar um sql pra fazer isso?
GOSTEI 0
Emerson Nascimento
26/08/2007
com cast() deve funcionar. mas para garantir o arredondamento pra cima, você deverá somar o valor com 0.4.
por exemplo:
select cast( valor + 0.4 as integer)
ou ainda usar uma UDF para arredondamento.
por exemplo:
select cast( valor + 0.4 as integer)
ou ainda usar uma UDF para arredondamento.
GOSTEI 0
Shakall
26/08/2007
valeu cara deu certo heeh ficou assim
´cast((il.ite_qtde/cast(p.pro_qtde_cx as numeric(15,2)))+0.4 as integer)´
Valeu!!!!
´cast((il.ite_qtde/cast(p.pro_qtde_cx as numeric(15,2)))+0.4 as integer)´
Valeu!!!!
GOSTEI 0