【问题标题】:Setting decimal scale based on a column value根据列值设置小数刻度
【发布时间】:2016-08-24 15:05:21
【问题描述】:

我从一个表中查询两个值。我想使用第二个值来设置第一个值的小数位数。有人知道如何使用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 并且 scale 为 3 我希望结果为 5.870

数量:7.00 规模:1 预期输出:7.0

数量:7 规模:4 预期输出:7.0000

【问题讨论】:

  • 添加一些示例表数据,以及预期的结果。
  • 刚刚添加,如果您需要更多信息,请告诉我
  • 您的查询包括两个表,tl 和 fun_table。是那些表的样本数据吗?
  • 样本数据来自存储在 tmp 中的 tl 表。第二个select语句是我需要的输出,只需要设置num输出值有tmp.scale值的小数位

标签: sql oracle formatting


【解决方案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 上测试。

【讨论】:

  • 我认为这可能是对的!我目前无权对其进行测试,但是当我可以测试时,我会将其设为正确答案(如果不是,请回复评论)!谢谢!!
【解决方案2】:
select round(fun,scale) from fun_table f, tmp where f.fun = tmp.scale;

也许这就是您要找的东西?根据您想要的逻辑,您可能希望用 floor 或 ceil 替换圆形函数。

【讨论】:

  • 这不只是将有趣的价值四舍五入到第一位吗?我不想四舍五入我收到的任何数据,只需设置比例
  • 哦,我明白了,很抱歉造成混乱。然后您可能需要将该值转换为 char,因为数字变量的 7.0 和 7.00 之间没有区别。 oracle 的语法是 to_char(num, '9999.99') 其中 '.' 后面的 9s第二个参数表示您希望显示的比例数。您可能还需要弄清楚如何根据比例列构造第二个参数('9999.99')。
  • 一切都好,感谢您的尝试。我只是不确定如何将 int 值转换为我需要将比例设置为 to_char 函数的格式。这就是我希望得到的帮助哈哈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多