Modèles de format SQL

Dans Snowflake, les modèles de formats SQL (c.-à-d. les littéraux contenant des chaînes de format) sont utilisés pour spécifier comment les valeurs numériques sont converties en chaînes et vice versa. En tant que tels, ils peuvent être spécifiés comme arguments dans les fonctions de conversion TO_CHAR , TO_VARCHAR et TO_DECIMAL , TO_NUMBER , TO_NUMERIC.

Note

Snowflake fournit également une prise en charge de certains modèles de format SQL limité pour les dates, les heures et les horodatages (voir Fonctions de date et d’heure et Fonctions de conversion). La prise en charge complète de l’utilisation des modèles de format SQL pour formater les dates, les heures et les horodatages sera ajoutée dans une prochaine version.

Dans ce chapitre :

Composants d’un modèle de format

Un modèle de format se compose d’une chaîne d’éléments de format et de littéraux.

Éléments de format

Les éléments de format sont des séquences de chiffres et/ou de lettres (généralement insensibles à la casse) et, dans certains cas, de symboles. Les éléments de format peuvent être directement concaténés les uns aux autres.

Certains éléments de format sont couramment utilisés dans tous les modèles de format pour contrôler l’impression et la correspondance du texte d’entrée. D’autres éléments de format ont des utilisations spécifiques en fonction du type de valeurs utilisés pour la conversion entrante/sortante. Pour plus d’informations, voir les sections suivantes de ce chapitre :

Littéraux de formats

Les littéraux de formats sont des séquences qui peuvent être composées de combinaisons des éléments suivants :

  • Chaînes de caractères arbitraires délimitées par des guillemets doubles (un guillemet double est représenté par deux guillemets doubles adjacents).

  • Un ou plusieurs des symboles suivants :

    Symbole/Caractère

    Remarques

    . (point)

    Dans les modèles numériques fixes, traités comme un élément de format lorsqu’ils suivent 0, 9 ou X ; sinon, conservés tels quels.

    , (virgule)

    Dans les modèles numériques, traités comme un élément de format lorsqu’ils suivent 0, 9 ou X ; sinon, conservés tels quels.

    ; (point-virgule)

    Toujours préservé tel quel.

    : (deux-points)

    Toujours préservé tel quel.

    - (signe moins)

    Toujours préservé tel quel.

    = (signe égal)

    Toujours préservé tel quel.

    / (barre oblique)

    Toujours préservé tel quel.

    ( (parenthèse gauche)

    Toujours préservé tel quel.

    ) (parenthèse droite)

    Toujours préservé tel quel.

Un littéral est toujours imprimé tel quel, exactement là où il se trouvait dans le modèle de format.

Voici un bref exemple d’utilisation d’un modèle de format SQL pour imprimer le signe moins après un nombre plutôt qu’avant celui-ci. Le MI indique où mettre le signe moins si le nombre est négatif.

select to_varchar(-123.45, '999.99MI') as EXAMPLE;

La sortie devrait ressembler à 123.45- plutôt qu’à -123.45 par défaut.

D’autres exemples sont inclus à la fin de ce chapitre.

Modificateurs de formats et gestion générique des espaces

Le tableau suivant énumère les éléments de format spéciaux qui contrôlent l’impression et la correspondance du texte d’entrée et qui sont communs à tous les modèles de formats :

Élément

Description

_ (soulignement)

Rien d’imprimé ; espace facultatif sur l’entrée.

FM

Modificateur de mode de remplissage ; bascule entre les modes compact et remplissage pour tous les éléments suivant le modificateur dans le modèle.

FX

Modificateur de correspondance exacte ; bascule entre les modes de correspondance lâche et exact pour tous les éléments suivant le modificateur dans le modèle.

Note

Le modificateur de mode de remplissage n’a aucun effet sur les éléments de format numérique de texte minimal (TM, TM9 et TME).

Impression des chaînes de sortie à l’aide du modificateur du mode Remplissage

Par défaut, le mode de remplissage est réglé sur remplissage et le modificateur FM du mode de remplissage le fait basculer vers compact ; l’utilisation répétée le refait basculer vers remplissage, etc.

Dans la plupart des cas, l’utilisation du mode remplissage lors de l’impression garantit que les éléments de format produisent une sortie d’une largeur fixe en décalant les nombres à gauche avec des zéros ou des espaces d’en-tête, et en décalant le texte avec des espaces à droite. Ceci garantit que la sortie en colonnes dans des polices à largeur fixe est alignée.

En mode compact, la plupart des éléments de format ne produisent qu’une sortie de largeur minimale (c’est-à-dire que les zéros et les espaces d’en-tête et les espaces de fin sont supprimés).

Les éléments de format qui ne respectent pas ces règles sont explicitement indiqués ci-dessous.

Le modificateur de correspondance exacte, FX n’affecte pas l’impression ; l’élément de format de barre de soulignement n’imprime rien.

Analyse des chaînes d’entrée à l’aide des modificateurs

L’analyse des chaînes d’entrée est influencée à la fois par le modificateur du mode de remplissage, FM, et par le modificateur de correspondance exacte FX. Dans un premier temps :

  • Le mode de remplissage est réglé sur remplissage et FM le bascule sur compact et inversement.

  • Le mode de correspondance exacte est réglé sur lâche et FX le bascule sur exact et inversement.

Toutes les correspondances entre les chaînes et les éléments de format et les littéraux pendant l’analyse sont insensibles à la casse.

En mode lâche, la première étape de l’analyse d’entrée consiste à sauter l’espace blanc d’en-tête (une séquence d’espaces, de tabulations, de caractères LF, CR, FF et VT) ; le mode au début de l’entrée est strict si le premier élément de format est FX. Sinon, il est lâche.

Note

Seuls les caractères d’espacement normaux sont autorisés dans les valeurs à analyser (c’est-à-dire que les composants ne peuvent pas être sur des lignes différentes, séparés par des tabulations, etc.).

Dans le mode de correspondance lâche, les espaces dans les littéraux sont comparés à n’importe quelle séquence d’entrée d’espaces non vides ; les caractères non spatiaux sont comparés un à un. En mode exact, tous les caractères d’un littéral doivent correspondre aux caractères saisis.

Les éléments du format numérique sont comparés aux séquences de chiffres correspondantes :

  • Si les modes remplissage et exact sont en vigueur, le nombre de chiffres doit correspondre exactement à la largeur des éléments de format numérique correspondants (des zéros d’en-tête sont attendus).

  • Si le mode compact ou lâche est activé, un numéro d’entrée correspondant doit avoir, au maximum, le nombre de chiffres égal à la largeur maximale de l’élément de format, et au moins un chiffre ; les zéros d’en-tête sont ignorés.

Les éléments de format textuel sont mis en correspondance sans prendre en compte la casse :

  • Si les modes remplissage et exact sont en vigueur, le nombre d’espaces de fin, jusqu’à la largeur maximale de l’élément, est attendu.

  • Sinon, les espaces après les éléments textuels de longueur variable sont ignorés en mode lâche, et la correspondance exacte avec le mot réel (sans espaces de remplissage) est attendue en mode exact.

Enfin, l’espace blanc de fin jusqu’à la fin de la chaîne d’entrée est ignoré si le mode actuel est lâche.

En principe, les modes lâche et exact ne permettent pas de faire correspondre les espaces lorsque ces derniers ne sont pas présents dans le modèle de format ou ne pouvaient pas être générés en imprimant le contenu des éléments de format en mode remplissage.

Note

Ce comportement diffère de la sémantique de correspondance laxiste d’Oracle, où des espaces peuvent être insérés entre deux éléments de format quelconques — Snowflake utilise une sémantique de correspondance plus stricte pour éviter les fausses correspondances excessives pendant la reconnaissance automatique du type de données.

Les endroits où les espaces doivent être ignorés s’ils sont présents dans les modes lâche et exact peuvent être explicitement marqués en utilisant l’élément de format _ (barre de soulignement).

En règle générale, un format en mode exact ne reconnaît que les chaînes d’entrée imprimées par le même format, tandis qu’un format en mode lâche reconnaît les chaînes d’entrée imprimées par le même format avec tous les modificateurs du mode de remplissage ajoutés ou supprimés.

Modèles de format numérique

Les modèles de format numérique prennent en charge deux types :

  • Position fixe (avec placement explicite des chiffres où sont placés les éléments de format 0, 9 ou X)

  • Texte minimal (éléments de format TM, TME et TM9)

Note

Ces deux types ne peuvent pas être mélangés dans le même modèle.

Formats numériques à position fixe

Note

Cette section traite des nombres à position fixe non négatifs ; pour plus d’informations sur le positionnement du signe d’un nombre dans la sortie pour des formats numériques à position fixe, voir Position du signe pour les formats à position fixe.

Les nombres à position fixe sont représentés par des éléments numériques, 0 ou 9. Par exemple, 999 contient des nombres de 1 à 3 chiffres décimaux. La partie fractionnaire des nombres est délimitée par des éléments séparateurs, . (point) ou D :

  • . est toujours rendu comme un point.

  • Pour utiliser un caractère différent pour les éléments D, modifiez la chaîne d’entrée pour remplacer tous les points par des virgules et toutes les virgules par des points avant d’appliquer la fonction de conversion.

En principe, les zéros d’en-tête dans la partie entière et les zéros en fin de ligne dans la partie fractionnaire sont remplacés par des espaces (sauf dans les cas où la valeur de la partie entière est égale à zéro, auquel cas elle est rendue comme un seul caractère 0). Pour supprimer ce comportement, utilisez l’élément de format 0 à la place de 9 ; les positions correspondantes ont 0 caractères préservés. L’élément de format B, lorsqu’il est utilisé avant le nombre, supprime le dernier 0 de la valeur entière (c’est-à-dire que si vous utilisez B et que la valeur de la partie entière du nombre est nulle, tous les chiffres s’affichent comme des espaces).

Le séparateur de groupe de chiffres , (virgule) ou G imprime le caractère de séparateur de groupe correspondant si le nombre est suffisamment grand pour que les chiffres soient sur les deux côtés du séparateur de groupe. Un exemple de modèle de format utile pour l’impression des sommes monétaires serait 999,999.00.

Lorsqu’il y a plus de chiffres dans la partie entière du nombre qu’il n’y a de positions de chiffres dans le format, tous les chiffres sont imprimés en tant que # pour indiquer un dépassement.

L’élément exposant permet de normaliser les nombres à position fixe de sorte que le premier chiffre de la partie entière soit compris entre 1 et 9 (sauf si la valeur du nombre est égale à zéro, auquel cas la valeur de l’exposant est également égale à zéro). L’élément EE sélectionne automatiquement le bon nombre de chiffres dans l’exposant et n’imprime pas le signe +, tandis que EEE, EEEE et EEEEE impriment toujours le signe + ou - de l’exposant et le nombre de chiffres demandé (les zéros d’en-tête ne sont pas supprimés). Le dépassement de l’exposant est indiqué par le signe # à la place des chiffres.

Les indicateurs exposants impriment un E majuscule ou un e minuscule selon la casse de la première lettre de l’élément de format.

L’élément de format X fonctionne comme un 9, sauf que les chiffres hexadécimaux 0-9A-F sont imprimés. Actuellement, les fractions hexadécimales ne sont pas prises en charge. Semblable à 9, X remplace les zéros d’en-tête par des espaces. L’élément 0, lorsqu’il est utilisé avec X imprime des chiffres hexadécimaux sans supprimer le zéro d’en-tête (utilisez donc 000X pour imprimer des nombres hexadécimaux qui contiennent toujours 4 chiffres).

Notez que X imprime les chiffres hexadécimaux en lettres latines majuscules et x minuscule imprime des lettres minuscules en lettres latines. L’élément de format 0 hexadécimal utilise la casse de l’élément de format X suivant.

En principe, les nombres hexadécimaux sont imprimés comme non signés, c’est-à-dire que les nombres négatifs ont tous des 1 dans les bits les plus significatifs, mais l’utilisation de l’élément X avec un signe explicite (S ou MI) fait imprimer le signe - avec la valeur absolue du nombre.

Les modèles de format numérique à position fixe signalent un débordement sur des valeurs spéciales (infinies ou non) de nombres en virgule flottante.

Éléments de format à position fixe

Le tableau suivant énumère les éléments pris en charge pour les formats à position fixe. Remarques :

  • La colonne Répétable indique si un élément peut être répété dans un modèle de format, sinon l’élément ne peut être utilisé qu’une fois par modèle de format.

  • La colonne Sensible à la casse indique les éléments pour lesquels la casse de l’élément affecte le format. Par exemple :

    • EE traite les exposants avec un E majuscule.

    • ee traite les exposants avec un e minuscule.

    Tous les autres éléments sont insensibles à la casse.

Élément

Répétable

Sensible à la casse

Description

$

Signe dollar imprimé avant les chiffres du numéro (généralement après le signe).

. (point)

Séparateur de fraction décimale ; toujours imprimé comme un point.

, (virgule)

Séparateur de groupe de chiffres ; imprimé sous forme de virgule ou d’espace blanc.

0

Position d’un chiffre ; les zéros de début et de fin sont imprimés explicitement.

9

Position d’un chiffre ; les zéros de début et de fin sont remplacés par des espaces blancs.

B

Force la représentation d’une valeur zéro sous forme d’espace dans le numéro suivant.

D

Séparateur de fraction décimale ; alternative pour l’élément . (voir description ci-dessus).

EE

Exposant à largeur variable, de 2 à 5 caractères, sans signe + pour les entiers (par exemple E0, E21, E200, E-200).

EEE

Exposant de largeur fixe (3 caractères) ; couvre une plage de E-9 à E+9.

EEEE

Exposant de largeur fixe (4 caractères) ; couvre une plage de E-99 à E+99.

EEEEE

Exposant de largeur fixe (5 caractères) ; couvre une plage de E-324 à E+308.

G

Séparateur de groupe de chiffres ; alternative pour , (voir description ci-dessus).

MI

Espace réservé de signe numérique explicite ; imprime un espace pour les nombres positifs ou un signe - pour les nombres négatifs.

S

Espace réservé de signe numérique explicite ; imprime un + pour les nombres positifs ou un signe - pour les nombres négatifs.

X

Chiffre hexadécimal.

Position du signe pour les formats à position fixe

Par défaut, les formats à position fixe réservent toujours un espace pour le signe du numéro :

  • Pour les numéros non négatifs, l’espace blanc par défaut est imprimé avant le premier chiffre.

  • Pour les nombres négatifs, l’espace blanc par défaut et le signe - sont imprimés avant le premier chiffre (ou décimale, lorsque l’élément de format B est utilisé pour les nombres fractionnaires).

Cependant, les éléments de format S, MI et $ peuvent être utilisés pour spécifier explicitement l’emplacement du signe et/ou de l’espace pour le numéro.

Par exemple (les barres de soulignement, _, sont utilisées dans ces exemples pour indiquer où les espaces vides sont insérés) :

Modèle de format

12 s’imprime ainsi :

-7 s’imprime ainsi :

99

_12

_-7

S99

+12

_-7

99S

12+

_7-

MI99

_12

-_7

99MI

12_

_7-

$99

_$12

_-$7

Impression de numéros à l’aide de formats à position fixe et du modificateur du mode Remplissage

En mode remplissage, les éléments de format à longueur variable, tels que EE et MI, sont espacés par la droite.

En mode compact, tous les espaces résultant des éléments de format numérique, y compris les éléments de longueur variable, sont supprimés, de sorte que les chaînes résultantes soient plus courtes et ne soient plus alignées. Par exemple (notez le manque d’espaces vides) :

Modèle de format

12 s’imprime ainsi :

-7 s’imprime ainsi :

FM99

12

-7

Analyse des numéros à l’aide des formats à position fixe et des modificateurs

L’analyse des chaînes contenant des nombres est affectée à la fois par les modificateurs FX et FM :

  • En mode lâche :

    • Les séparateurs de groupes de chiffres sont facultatifs (c’est-à-dire que les nombres avec ou sans séparateurs de groupes correspondent — bien que le nombre de chiffres entre les séparateurs de groupes respectifs doive correspondre) ; cela permet aussi + comme une correspondance valide pour l’élément de format MI.

    • Le mode lâche ne désactive pas l’exigence selon laquelle les chiffres (même les zéros de début ou de fin) doivent être présents pour correspondre aux éléments de format 0.

    • Les espaces entre le signe de tête et le premier chiffre sont autorisés en mode lâche.

    • De plus, en mode lâche, tous les éléments de format exposant (EE, EEE, EEEE et EEEEE) sont traités comme EE, et correspondent à une spécification d’exposant avec 1 à 3 chiffres et un signe + ou - facultatif.

    • Utilisez B pour autoriser l’appariement de nombres sans chiffres dans la partie entière. Le point décimal avant une partie fractionnaire vide est facultatif en mode lâche.

  • En mode exact :

    • Le nombre doit avoir un nombre approprié d’espaces à la place des chiffres omis pour correspondre au format (c.-à-d. en mode remplissage, ce sont des espaces et, en mode compact, c’est un manque d’espaces).

    • L’omission des séparateurs de groupes n’est pas autorisée en mode exact, et MI ne correspondra pas au signe +.

    • Les éléments de format de l’exposant autres que EE doivent correspondre à la place du signe et au nombre exact de chiffres requis par l’élément de format.

    • Le point décimal à l’endroit spécifié par le modèle de format est obligatoire.

Formats numériques en texte minimal

Alors que les modèles de format numérique à position fixe spécifient toujours explicitement le nombre de chiffres, les éléments de format de texte minimal utilisent un nombre minimal de chiffres basé sur la valeur du nombre. Les éléments de format TM* produisent toujours une sortie de longueur variable sans espaces, quel que soit le modificateur du mode de remplissage (remplissage ou compact).

  • TM9 imprime le nombre sous forme de nombre entier ou de fraction décimale, en fonction de la valeur du nombre. Toute valeur numérique décimale à virgule fixe est imprimée avec précision avec le nombre de chiffres de la partie fractionnaire déterminé par l’échelle du nombre (les zéros de fin de ligne sont conservés en mode remplissage).

  • Pour les nombres à virgule flottante, TM9 choisit le nombre de chiffres fractionnaires en fonction de l’exposant du nombre (notez que la conversion binaire en fraction décimale précise n’est pas possible). Si l’amplitude du nombre à virgule flottante est trop grande, ce qui rend la notation positionnelle trop longue, la notation scientifique est activée (voir TME ci-dessous). Si le nombre à virgule flottante est trop petit, TM9 imprime zéro.

  • TME imprime le nombre en notation scientifique, c’est-à-dire avec un exposant (identique à EE) et un chiffre dans la position entière de la partie fractionnaire. La casse de l’indicateur de l’exposant (E ou e) correspond à la casse de la première lettre (T ou t) de l’élément de format.

  • TM choisit TM9 ou TME en fonction de l’importance du nombre, pour minimiser la longueur du texte tout en préservant la précision.

Éléments de format de texte minimal

Le tableau suivant énumère les éléments pris en charge pour les formats de texte minimal. Remarques :

  • Aucun élément ne peut être répété dans une chaîne de format de texte minimal.

  • La colonne Sensible à la casse indique les éléments pour lesquels la casse de l’élément affecte le format. Par exemple :

    • TME traite les exposants avec un E majuscule.

    • tme traite les exposants avec un e minuscule.

    Tous les autres éléments sont insensibles à la casse.

Élément

Répétable

Sensible à la casse

Description

$

Le signe dollar est inséré avant les chiffres du numéro (généralement après le signe).

TM

Numéro de texte minimal, soit TM9 ou TME, le plus court des deux.

TM9

Numéro de texte minimal en notation positionnelle.

TME

Numéro de texte minimal en notation scientifique (avec exposant).

B

Force la représentation d’une valeur zéro sous forme d’espace dans le numéro suivant.

MI

Espace réservé de signe numérique explicite ; devient - ou un espace.

S

Espace réservé de signe numérique explicite ; devient - ou +.

Position du signe pour les formats de texte minimal

Par défaut, le signe pour les formats de texte minimal est, au choix :

  • - pour les nombres négatifs, précédés du nombre.

  • Omis pour les numéros non négatifs.

Les éléments $, S et MI ont le même effet que les modèles de format à position fixe. Notez que les nombres à virgule flottante ont deux valeurs zéro distinctes (+0. et -0.) qui représentent respectivement des valeurs infinitésimales positives et négatives.

Analyse des numéros à l’aide des formats de texte minimal et des modificateurs

L’analyse avec les modèles de format de texte minimal n’est pas affectée par les modificateurs FX ou FM ; cependant, les éléments de signe explicite, S et MI sont affectés, comme décrit ci-dessus.

TM9 correspond à n’importe quel nombre décimal (entier ou fractionnaire) en notation positionnelle ; il ne correspond pas aux nombres en notation scientifique (c’est-à-dire avec exposant). Inversement :

  • TME ne correspond qu’à la notation scientifique.

  • TM correspond aux deux.

Les nombres assortis d’éléments de texte minimal ne peuvent pas contenir d’espaces ou de séparateurs de groupes de chiffres.

Les lettres dans les éléments d’exposants et les chiffres hexadécimaux sont toujours mis en correspondance sans tenir compte de la casse (minuscule ou majuscule).

Formats alternatifs, automatiques et par défaut

Élément

Description

| (canal)

Sépare les formats alternatifs.

AUTO

Format(s) automatique(s).

Lors de l’analyse des chaînes, il est possible de spécifier plusieurs formats alternatifs en séparant les chaînes de format avec le caractère |. La chaîne est analysée si elle correspond à un format quelconque. Si la chaîne d’entrée correspond à plusieurs formats, n’importe quel format sera utilisé pour la conversion.

Un format entier utilisé pour l’analyse peut être remplacé par le mot clé AUTO ; ceci insère un ou plusieurs formats automatiques alternatifs en fonction du type de la valeur source ou du résultat. L’ajout d’un format personnalisé au(x) format(s) automatique(s) peut se faire en utilisant AUTO comme alternative.

Les formats par défaut sont utilisés lorsque les formats ne sont pas explicitement spécifiés dans les fonctions de conversion, pour analyser les valeurs d’entrée (c’est-à-dire dans des fichiers CSV) et pour imprimer les résultats.

Formats par défaut pour l’impression

Le tableau suivant répertorie les formats d’impression par défaut :

Type de données SQL

Paramètre

Format par défaut

DECIMAL

aucun

TM9

DOUBLE

aucun

TME

Formats par défaut pour l’analyse

Le tableau suivant répertorie les formats par défaut pour l’analyse :

Type de données SQL

Paramètre

Format AUTO par défaut

DECIMAL

Aucun

TM9

DOUBLE

Aucun

TME

La liste des formats utilisés pour la conversion optimiste automatique des chaînes (c’est-à-dire pour les chaînes qui sont automatiquement reconnues comme numériques) est l’union de tous les formats du tableau ci-dessus des formats d’entrée par défaut.

Exemples

Exemples de sortie

Cet exemple montre comment afficher les nombres avec des zéros d’en-tête :

create table sample_numbers (f float);
insert into sample_numbers (f) values (1.2);
insert into sample_numbers (f) values (123.456);
insert into sample_numbers (f) values (1234.56);
insert into sample_numbers (f) values (-123456.789);
select to_varchar(f, '999,999.999'), to_varchar(f, 'S000,000.000') from sample_numbers;

La sortie ressemblera à :

+------------------------------+-------------------------------+
| TO_VARCHAR(F, '999,999.999') | TO_VARCHAR(F, 'S000,000.000') |
+==============================+===============================+
|        1.2                   | +000,001.200                  |
+------------------------------+-------------------------------+
|      123.456                 | +000,123.456                  |
+------------------------------+-------------------------------+
|    1,234.56                  | +001,234.560                  |
+------------------------------+-------------------------------+
| -123,456.789                 | -123,456.789                  |
+------------------------------+-------------------------------+

Vous n’avez pas besoin de zéros d’en-tête pour aligner des nombres. Le mode de remplissage par défaut est « remplissage », ce qui signifie que des espaces d’en-tête sont utilisés pour aligner les nombres en fonction de la position des points décimaux.

select to_varchar(f, '999,999.999'), to_varchar(f, 'S999,999.999') from sample_numbers;

La sortie ressemblera à :

+------------------------------+-------------------------------+
| TO_VARCHAR(F, '999,999.999') | TO_VARCHAR(F, 'S999,999.999') |
+==============================+===============================+
|        1.2                   |       +1.2                    |
+------------------------------+-------------------------------+
|      123.456                 |     +123.456                  |
+------------------------------+-------------------------------+
|    1,234.56                  |   +1,234.56                   |
+------------------------------+-------------------------------+
| -123,456.789                 | -123,456.789                  |
+------------------------------+-------------------------------+

Cet exemple montre ce qui se passe si vous utilisez le modificateur FM (Fill Mode) pour passer du mode « remplissage » au mode « compact », c’est-à-dire pour supprimer les premiers caractères qui aligneraient les nombres :

select  to_varchar(f, '999,999.999'), to_varchar(f, 'FM999,999.999') from sample_numbers;

La sortie ressemblera à :

+------------------------------+--------------------------------+
| TO_VARCHAR(F, '999,999.999') | TO_VARCHAR(F, 'FM999,999.999') |
+==============================+================================+
|        1.2                   | 1.2                            |
+------------------------------+--------------------------------+
|      123.456                 | 123.456                        |
+------------------------------+--------------------------------+
|    1,234.56                  | 1,234.56                       |
+------------------------------+--------------------------------+
| -123,456.789                 | -123,456.789                   |
+------------------------------+--------------------------------+

Cet exemple montre comment afficher les nombres en notation exponentielle :

select to_char(1234, '9d999EE'), 'will look like', '1.234E3';

La sortie ressemblera à :

+--------------------------+------------------+-----------+
| TO_CHAR(1234, '9D999EE') | 'WILL LOOK LIKE' | '1.234E3' |
+==========================+==================+===========+
| 1.234E3                  |  will look like  |  1.234E3  |
+--------------------------+------------------+-----------+

Ceci montre comment inclure des littéraux dans la sortie. Les parties littérales sont délimitées par des guillemets doubles (qui, à leur tour, se trouvent à l’intérieur de guillemets simples qui délimitent la chaîne).

select to_char(12, '">"99"<"');

La sortie ressemblera à :

+-------+
| > 12< |
+-------+

Exemples d’entrées

Ces exemples illustrent l’utilisation de modèles de formats pour les entrées.

L’exemple suivant montre quelques opérations d’entrée simples, en mettant l’accent sur la différence entre « 0 » et « 9 » pour spécifier le format des chiffres.

Le chiffre « 9 » en tant que formateur accepte les espaces ou les chiffres d’en-tête « manquants ». Le chiffre « 0 » en tant que formateur n’accepte pas les espaces ou les zéros d’en-tête manquants.

-- All of the following convert the input to the number 12,345.67.
SELECT TO_NUMBER('012,345.67', '999,999.99', 8, 2);
SELECT TO_NUMBER('12,345.67', '999,999.99', 8, 2);
SELECT TO_NUMBER(' 12,345.67', '999,999.99', 8, 2);
-- The first of the following works, but the others will not convert.
-- (They are not supposed to convert, so "failure" is correct.)
SELECT TO_NUMBER('012,345.67', '000,000.00', 8, 2);
SELECT TO_NUMBER('12,345.67', '000,000.00', 8, 2);
SELECT TO_NUMBER(' 12,345.67', '000,000.00', 8, 2);

Ceci montre comment accepter l’un des deux formats numériques (-### ou ###-).

-- Create the table and insert data.
create table format1 (v varchar, i integer);
insert into format1 (v) values ('-101');
insert into format1 (v) values ('102-');
insert into format1 (v) values ('103');

-- Try to convert varchar to integer without a
-- format model.  This fails (as expected)
-- with a message similar to:
--    "Numeric value '102-' is not recognized"
update format1 set i = TO_NUMBER(v);

-- Now try again with a format specifier that allows the minus sign
-- to be at either the beginning or the end of the number.
-- Note the use of the vertical bar ("|") to indicate that
-- either format is acceptable.
update format1 set i = TO_NUMBER(v, 'MI999|999MI');
select i from format1;
Revenir au début