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 typeNUMBER
,BINARY_FLOAT
, ouBINARY_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"