【问题标题】:Insert white space in oracle APEX currency format mask在 oracle APEX 货币格式掩码中插入空格
【发布时间】:2021-07-21 15:20:15
【问题描述】:

我正在使用 oracle APEX 20.1 并有一个报告,其中有一列显示货币值。 由于我来自欧洲,我需要在值后面加上货币符号(与您在美国经常看到的典型 $amount 格式不同)。

我通过将列的格式掩码更改为“FM999G999G999G999G990D00L”来实现这一点。 到目前为止,这很好用,但从视觉上看,如果在数字 (D00) 和货币符号 (L) 的末尾之间有一个空格,我会更喜欢。有没有办法在这种格式字符串中插入一个静态空格?

我已经查看了 oracle 关于货币格式字符串的文档,但他们似乎没有提到包含始终存在的空格或任意静态字符的选项。

提前谢谢你。

【问题讨论】:

    标签: oracle oracle-apex number-formatting


    【解决方案1】:

    很遗憾,您不能像 for dates 那样在数字掩码中包含标点符号或字符文字。

    您可以在货币符号本身中包含一个空格 - 这是一个字符串,而不是一个字符,并且可以是 up to 10 bytes:

    to_char(<number>, 'FM999G999G999G999G990D00L', 'nls_currency='' $''')
    

    虽然它使用了一个固定的货币符号,而不是来自 L 格式元素的会话值;您可以从会话参数中动态获取它:

    to_char(
      <number>,
      'FM999G999G999G999G990D00L',
      (
        select 'nls_currency='' ' || value || ''''
        from nls_session_parameters where parameter = 'NLS_CURRENCY'
      )
    )
    

    这有点难看。而且您可能实际上并不想要会话的货币符号;始终使用与该数据相关的符号可能更合适。

    而且我想这些都不适合 Apex 的数字列格式,因此您可能需要在查询中明确调用 to_char() 并让 Apex 将其视为预先格式化的字符串。 (我不知道 Apex 中的格式化是如何工作的 - 根据您的描述,我假设您在某个地方为交互式网格中的列定义了格式掩码或其他任何内容;但也许您已经在调用 to_char()。)

    您还可以更改会话的货币符号:

    alter session set nls_currency = ' €';
    select to_char(123.45, 'FM999G999G999G999G990D00L') from dual;
    
    123.45 €
    

    这可能是一个选项,但会影响所有货币字段 - 使用 L 格式元素的地方 - 虽然这可能是件好事。

    db<>fiddle.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多