Oracle Database предоставя TO_CHAR(number)
функция, която ви позволява да форматирате числа въз основа на даден модел на форматиране. Има три форматни елемента, които можете да използвате с TO_CHAR()
функция, за да върне стойност като валута.
Елементи на валутния формат
Елементите на валутния формат са L
, C
и U
.
C | Връща символа за валута ISO (текущата стойност на NLS_ISO_CURRENCY параметър). |
L | Връща символа за местна валута (текущата стойност на NLS_CURRENCY параметър). |
U | Връща символа за двойна валута в евро (или друг) определен от текущата стойност на NLS_DUAL_CURRENCY параметър. |
Тези модели на формат ви позволяват да извеждате знака за валута въз основа на настройките на вашата валута/регион, вместо да се налага да предоставяте символ за фиксирана валута.
Въпреки че е вярно, че можете да предоставите низов литерал за валутата (например знак за долар ($
) за долари), това предполага, че валутата е деноминирана в тази твърдо кодирана стойност. Има много други възможни валути по света и елементите на форматирането могат динамично да връщат символа на местната валута за сесията на потребителя.
Пример
Ето пример за демонстрация:
ALTER SESSION SET NLS_TERRITORY = 'Australia';
SELECT
TO_CHAR(12345, 'fmL99G999D00') AS "r1",
TO_CHAR(12345, 'fmC99G999D00') AS "r3",
TO_CHAR(12345, 'fmU99G999D00') AS "r3"
FROM DUAL;
Резултат:
r1 r3 r3 _____________ _______________ _____________ $12,345.00 AUD12,345.00 $12,345.00
Единствената разлика между тези три колони е елементът на валутния формат. Първият използва L
, вторият използва C
, а третият използва U
.
Всички те използват fm
модификатор на формат, за да потисне всяко допълване. Те също използват 9
и 0
форматни елементи за извеждане на числата (0
елемент включва водещи/завършващи нули). Те също така включват разделител на групи (представен от G
), десетичен знак (представен с D
). ).
Двойни валути
В горния пример зададох NLS_TERRITORY
до Australia
. Това доведе до връщане на същия символ за валута в две от трите колони (т.е. r1
и r3
колони).
В следния пример използвам различна територия:
ALTER SESSION SET NLS_TERRITORY = 'Denmark';
SELECT
TO_CHAR(12345, 'fmL99G999D00') AS "r1",
TO_CHAR(12345, 'fmC99G999D00') AS "r3",
TO_CHAR(12345, 'fmU99G999D00') AS "r3"
FROM DUAL;
Резултат:
r1 r3 r3 ______________ _______________ _____________ kr12.345,00 DKK12.345,00 €12.345,00
Този път получаваме различен символ за валута за всеки от r1
и r3
колони.
Вижте как да проверите стойностите на NLS параметрите, ако трябва да ги проверите.
'nlsparam'
Аргумент
Когато използвате TO_CHAR()
функция, 'nlsparam'
Аргументът може да се използва за определяне на десетичния знак и разделителя на групата, символа за местна валута и символа за международна валута.
Приема следната форма:
'NLS_NUMERIC_CHARACTERS = ''dg''
NLS_CURRENCY = ''text''
NLS_ISO_CURRENCY = territory '
Пример:
SELECT
TO_CHAR(
1234.56,
'fmL99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Резултат:
€1.234,56
Ето го отново, но този път замествам L
с C
във формат модел:
SELECT
TO_CHAR(
1234.56,
'fmC99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Резултат:
EUR1.234,56
C
връща символа за валута ISO, който в този случай е EUR
.
Вижте този пълен списък на елементите на числовия формат в Oracle за списък с елементи на формат, които могат да се използват за форматиране на числа с TO_CHAR()
функция.