2016-08-24 77 views
0

我从表中查询两个值。我想使用第二个值来设置第一个值的小数位数。有谁知道如何使用to_char来设置?我正在查看格式,我不知道如何使我得到的int符合我需要的格式。这里是我的代码:基于列值设置小数位数

with tmp as (select num, scale 
     from tl) 
select fun, num 
from fun_table f, tmp 
where f.fun = tmp.scale; 

编辑: 如果我收到NUM为5.87和规模为3我想要的结果是5.870

民:7.00:1比例预期输出:7.0

数量:7比例:4预计产量:7.0000

+0

添加一些示例表数据和预期结果。 – jarlh

+0

刚刚添加,让我知道如果您需要更多信息 – SJR59

+0

您的查询包括两个表,tl和fun_table。那些表格的样本数据是? – jarlh

回答

1

这样的事情?

SELECT TO_CHAR(num, CONCAT('99D',RPAD('9',scale,'9'))) FROM tl 

,或者,如果scale可以是0,你不希望显示小数点分隔符在这种情况下,

SELECT TO_CHAR(num, CONCAT('99',RPAD('D',scale+1,'9'))) FROM tl 

在测试了Oracle数据库11g。

+0

我认为这可能是正确的!我目前没有进行测试,但我会在正确的答案(或评论回来,如果没有的话),当我可以测试!谢谢!! – SJR59

0
select round(fun,scale) from fun_table f, tmp where f.fun = tmp.scale; 

也许这就是你要找的?取决于你想要的逻辑,你可能想用floor或ceil替换round函数。

+0

的小数刻度不会只是将乐趣值放在第num个位置?我不想轮到我收到的任何数据只是设置规模 – SJR59

+0

哦,我看到,抱歉的混乱。然后,您可能需要将该值转换为char,因为对于数字变量,7.0和7.00之间没有差异。 oracle的语法是to_char(num,'9999.99'),其中'。'后面的9是。在第二个参数中表示您希望显示的比例数。尽管如此,您可能还需要了解如何构建第二个参数('9999.99'),具体取决于比例列。 – hchaznedaroglu

+0

一切都很好,谢谢你的努力。我只是不知道如何将int值转换为我需要将scale设置为to_char函数的格式。那是我希望得到的帮助哈哈 – SJR59