Duvida SQL

Firebird

26/08/2007

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!


Shakall

Shakall

Curtidas 0

Respostas

Sillier

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


GOSTEI 0
Shakall

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

Emerson Nascimento

26/08/2007

select (it_qtde/ cast(it_qtde_cx as numeric(15,3))) from itens_lista


GOSTEI 0
Shakall

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?


GOSTEI 0
Emerson Nascimento

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.


GOSTEI 0
Shakall

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!!!!


GOSTEI 0
POSTAR