Вставьте пробел в маску формата валюты oracle APEX

#oracle #oracle-apex #number-formatting

Вопрос:

Я использую oracle APEX 20.1 и у меня есть отчет со столбцом, в котором отображаются значения валют. Поскольку я из Европы, мне нужно, чтобы символ валюты стоял за значением (в отличие от типичного формата суммы в долларах, который вы часто видите в Америке).

Я добился этого, изменив маску формата столбца на «FM999G999G999G999G990D00L». Пока это работает хорошо, но визуально я бы предпочел, чтобы между концом числа (D00) и символом валюты (L) был пробел. Есть ли способ вставить статический пробел в строку этого формата?

Я уже просматривал документацию oracle по строкам формата валюты, но в них, похоже, не упоминается такая опция, как включение всегда присутствующего пробела или произвольного статического символа.

Заранее спасибо.

Ответ №1:

К сожалению, вы не можете включать знаки препинания или символьные литералы в числовую маску, как это возможно для дат.

Вы можете включить пробел как часть самого символа валюты — это строка, а не символ, и ее размер может составлять до 10 байт:

 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, хотя, возможно, это и хорошо.

бд<>скрипка<>.


'')
хотя в этом случае используется фиксированный символ валюты, а не значение сеанса из элемента формата L; вы можете получить его динамически из параметров сеанса:


что немного некрасиво. И на самом деле вам может не понадобиться символ валюты сеанса; возможно, было бы более уместно всегда использовать символ, соответствующий этим данным.

И я полагаю, что ни один из них не будет соответствовать числовому форматированию столбцов Apex, поэтому вам, вероятно, потребуется явно выполнить этот to_char() вызов в своем запросе, и Apex просто обработает его как предварительно отформатированную строку. (Я понятия не имею, как работает форматирование в Apex — из вашего описания я предполагаю, что где-то вы определяете маску формата для столбца в интерактивной сетке или что-то еще; но, возможно, вы уже звоните to_char() .)

Вы также можете изменить символ валюты для сеанса:



что может быть вариантом, но повлияет на все поля валюты, в которых используется элемент формата L, хотя, возможно, это и хорошо.

бд<>скрипка<>.