Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment formater un nombre en tant que devise dans Oracle

Oracle Database fournit le TO_CHAR(number) fonction qui vous permet de formater des nombres en fonction d'un modèle de format donné. Il existe trois éléments de format que vous pouvez utiliser avec le TO_CHAR() fonction afin de renvoyer une valeur en tant que devise.

Éléments de format de devise

Les éléments de format monétaire sont L , C , et U .

C Renvoie le symbole monétaire ISO (la valeur actuelle du NLS_ISO_CURRENCY paramètre).
L Renvoie le symbole de la devise locale (la valeur actuelle de NLS_CURRENCY paramètre).
U Renvoie le symbole de double devise de l'euro (ou autre), déterminé par la valeur actuelle du NLS_DUAL_CURRENCY paramètre.

Ces modèles de format vous permettent de générer le signe monétaire en fonction de vos paramètres de devise/région, plutôt que d'avoir à fournir un symbole monétaire fixe.

S'il est vrai que vous pouvez fournir une chaîne littérale pour la devise (par exemple, un signe dollar ($ ) pour les dollars), cela suppose que la devise est libellée dans cette valeur codée en dur. Il existe de nombreuses autres devises possibles dans le monde et les éléments de format sont capables de renvoyer dynamiquement le symbole de la devise locale pour la session de l'utilisateur.

Exemple

Voici un exemple pour illustrer :

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;

Résultat :

           r1              r3            r3 
_____________ _______________ _____________ 
$12,345.00    AUD12,345.00    $12,345.00   

La seule différence entre ces trois colonnes est l'élément de format monétaire. Le premier utilise L , le second utilise C , et le troisième utilise U .

Ils utilisent tous le fm modificateur de format pour supprimer tout remplissage. Ils utilisent également le 9 et 0 éléments de format pour afficher les nombres (le 0 l'élément comprend des zéros de tête/de fin). Ils incluent également un séparateur de groupe (représenté par G ), un caractère décimal (représenté par D ).

Double devises

Dans l'exemple ci-dessus, j'ai défini le NLS_TERRITORY vers Australia . Cela a entraîné le retour du même symbole monétaire dans deux des trois colonnes (c'est-à-dire le r1 et r3 colonnes).

Dans l'exemple suivant, j'utilise un territoire différent :

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;

Résultat :

            r1              r3            r3 
______________ _______________ _____________ 
kr12.345,00    DKK12.345,00    €12.345,00   

Cette fois, nous obtenons un symbole monétaire différent pour chacun des r1 et r3 colonnes.

Voir Comment vérifier les valeurs des paramètres NLS si vous avez besoin de les vérifier.

Le 'nlsparam' Argumentation

Lors de l'utilisation de TO_CHAR() fonction, le 'nlsparam' L'argument peut être utilisé pour spécifier le caractère décimal et le séparateur de groupe, le symbole monétaire local et le symbole monétaire international.

Il prend la forme suivante :

'NLS_NUMERIC_CHARACTERS = ''dg''
   NLS_CURRENCY = ''text''
   NLS_ISO_CURRENCY = territory '

Exemple :

SELECT 
    TO_CHAR(
        1234.56, 
        'fmL99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Résultat :

€1.234,56

Le revoilà, mais cette fois je remplace L avec C dans le modèle de format :

SELECT 
    TO_CHAR(
        1234.56, 
        'fmC99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Résultat :

EUR1.234,56

Le C renvoie le symbole monétaire ISO, qui dans ce cas est EUR .

Voir cette liste complète des éléments de format de nombre dans Oracle pour une liste des éléments de format qui peuvent être utilisés pour formater les nombres avec le TO_CHAR() fonction.