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() функция.