Oracle TO_CHAR格式掩码,用于显示整数和浮点数

时间:2014-02-05 08:26:01

标签: sql oracle oracle-apex number-formatting

我正在尝试找到正确的Oracle格式掩码,以某种方式在报表的Apex页面上显示数字。 大多数情况下这些数字是整数,但有时这些数字可以是浮点数。 假设我有以下三个问题:

查询1

SELECT TO_CHAR(1, '<Format Mask>', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;

查询2

SELECT TO_CHAR(0.1, '<Format Mask>', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;

查询3

SELECT TO_CHAR(0.01, '<Format Mask>', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;

现在我想使用一个单一格式的掩码,它会给我以下结果:

结果1

1

结果2

0,1

结果3

0,01

任何人都可以为我提供正确的格式掩码来实现这一目标吗? 我尝试过像 FM990D999 这样的格式模板,但它在查询1中留下了逗号跟踪1的逗号。

1 个答案:

答案 0 :(得分:0)

有一些方法可以在查询中更改列值,同时仍保留报告中的(某些)功能。但是,如果有多个这样的列和多个报告,您可能会发现存在大量开销以获得少量收益 请看OTN论坛上的这篇文章:order by date in IR
问题大致相同:列中的数据代表日期,但实际上不是日期。这篇文章包含在apex中使用的解决方案&lt; 4.2。
从4.2开始,你有一个更好的选项叫做HTML表达式 再次,从OTN链接:Re: Report formatting/sorting issue

引自链接帖子,用户fac586

  

在查询中包括方差和abs(方差):

SELECT
        region,
        estimate,
        actual,
        (estimate - actual) AS variance,
        ABS(estimate - actual) AS abs_variance,
        (CASE 
          WHEN (estimate - actual)>=0 THEN 'green'
          WHEN (estimate - actual)<0 THEN 'red'
          ELSE NULL
        END) AS variance_color
from
        expenses
     

“方差”列的HTML表达式为:

<span style="color: #VARIANCE_COLOR#; font-weight: bold;">#ABS_VARIANCE#</span>
     

隐藏#VARIANCE_COLOR##ABS_VARIANCE#列。

     

#ABS_VARIANCE#是列中显示的值,但排序是   使用原始方差值在基础SQL中执行。

这很像Alex建议但是更多的工作:在源代码中格式化,添加一个html表达式,隐藏另一列。
我想这取决于你想要开多远。为什么不通过其属性将格式应用于列?
另请注意,可以在这些字段中使用字符串替换语法。您可以使用包含格式掩码的几个应用程序项,然后在格式掩码字段中引用正确的掩码。 例如: 应用项AI_FORMAT_MASK1的值为FM9990D00 在格式掩码字段中,您可以使用&AI_FORMAT_MASK1.