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