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

Fonction TO_CHAR (nombre) dans Oracle

Dans Oracle Database, le TO_CHAR(number) la fonction convertit un nombre en VARCHAR2 valeur dans le format spécifié par l'argument format.

Syntaxe

La syntaxe ressemble à ceci :

TO_CHAR(n [, fmt [, 'nlsparam' ] ])

Où :

  • n peut être de type NUMBER , BINARY_FLOAT , ou BINARY_DOUBLE .
  • fmt est un modèle de format facultatif qui spécifie comment le résultat doit être formaté. Consultez les éléments de format de nombre valides qui peuvent être utilisés pour construire votre modèle de format.
  • 'nlsparam' est un argument facultatif qui spécifie comment les différents caractères sont renvoyés. Vous pouvez l'utiliser 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. Si cet argument est omis, les valeurs par défaut de la session en cours sont utilisées.

Exemple

Voici un exemple pour illustrer le fonctionnement de la fonction :

SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;

Résultat :

    RESULT 
__________ 
 12,345   

Le premier argument est le nombre réel que nous formatons, et le deuxième argument est le modèle de format. Le modèle de format spécifie comment le nombre est formaté.

Dans ce cas, notre modèle de format formate le nombre avec un séparateur de groupe dans la position appropriée. Chaque chiffre numérique est représenté par 9 , et le séparateur de groupe est représenté par G .

Voici ce qui se passe si nous modifions légèrement le modèle de format :

SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;

Résultat :

     RESULT 
___________ 
 012,345    

Dans ce cas, nous avons commencé le modèle de format avec un 0 personnage. Cela renvoie un zéro non significatif, le cas échéant. Le 9 caractère ne renvoie pas de zéros non significatifs.

En fait, nous pourrions remplacer tous les 9 s avec 0 s si nous voulons. Voici une comparaison qui montre comment les résultats peuvent différer considérablement, selon l'élément de format que vous utilisez :

SELECT 
    TO_CHAR(12, '000G000') AS "000G000",
    TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;

Résultat :

    000G000     999G999 
___________ ___________ 
 000,012          12    

Symboles monétaires

Vous pouvez utiliser le L élément de format pour renvoyer le symbole de la devise locale.

Exemple :

SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;

Résultat :

                 RESULT 
_______________________ 
          $12,345.00   

Cet exemple utilise un modèle de format qui génère le résultat à l'aide du symbole de la devise locale (représenté par L ), un séparateur de groupe (représenté par G ), un caractère décimal (représenté par D ), et bien sûr, chaque chiffre numérique (représenté par 9 ).

Le symbole de la devise locale est déterminé par la valeur actuelle du NLS_CURRENCY paramètre. C'est vrai qu'on aurait pu utiliser un signe dollar ($ ) pour le symbole monétaire, mais cela suppose que la devise est libellée en dollars. Il existe de nombreuses autres devises possibles dans le monde, et le L L'élément de format est capable de renvoyer dynamiquement le symbole de la devise locale pour la session de l'utilisateur.

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

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 cette fonction.

Format par défaut

Si vous omettez le fmt argument, le nombre est converti en un VARCHAR2 valeur exactement assez longue pour contenir ses chiffres significatifs.

Voici un exemple de conversion d'un nombre sans spécifier le format :

SELECT TO_CHAR(525.45)
FROM DUAL;

Résultat :

525.45

Le 'nlsparam' Argumentation

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, 
        'L99G999D99',
        '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, 
        'C99G999D99',
        '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 .

Comment supprimer le rembourrage

Vous avez peut-être remarqué que certains exemples ont un rembourrage appliqué à gauche des résultats. Un tel rembourrage peut être supprimé avec le fm modificateur de format.

Exemple :

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

Résultat :

€1.234,56

Arguments nuls

Passer null donne null :

SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;

Résultat :

null

Par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois que null se produit à la suite d'un SQL SELECT déclaration.

Cependant, vous pouvez utiliser SET NULL pour spécifier une autre chaîne à renvoyer. Ici, j'ai précisé que la chaîne null doit être retourné.

Argument manquant

L'appel de la fonction sans passer d'arguments génère une erreur :

SELECT TO_CHAR()
FROM DUAL;

Résultat :

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"

Passer trop d'arguments entraîne également une erreur :

SELECT TO_CHAR(123, '99', 'NLS_ISO_CURRENCY = GERMANY', 'oops!' )
FROM DUAL;

Résultat :

SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"