9.8. Fonctions de formatage des types de données

Les fonctions de formatage de PostgreSQL™ fournissent un ensemble d'outils puissants pour convertir différents types de données (date/heure, entier, nombre à virgule flottante, numérique) en chaînes formatées et pour convertir des chaînes formatées en types de données spécifiques. Le Tableau 9.20, « Fonctions de formatage » les liste. Ces fonctions suivent toutes une même convention d'appel : le premier argument est la valeur à formater et le second argument est un modèle définissant le format de sortie ou d'entrée.

La fonction to_timestamp à un argument est aussi disponible ; elle accepte un argument double precision unique pour convertir une valeur de type epoch Unix en timestamp with time zone (secondes depuis 1970-01-01 00:00:00+00) en timestamp with time zone. (Les types epoch Unix (entier) sont implicitement convertis en double precision.)

Tableau 9.20. Fonctions de formatage

Fonction Type en retour Description Exemple
to_char(timestamp, text) text convertit un champ de type timestamp en chaîne to_char(current_timestamp, 'HH12:MI:SS')
to_char(interval, text) text convertit un champ de type interval en chaîne to_char(interval '15h 2m 12s', 'HH24:MI:SS')
to_char(int, text) text convertit un champ de type integer en chaîne to_char(125, '999')
to_char(double precision, text) text convertit un champ de type real/double precision en chaîne to_char(125.8::real, '999D9')
to_char(numeric, text) text convertit un champ de type numeric en chaîne to_char(-125.8, '999D99S')
to_date(text, text) date convertit une chaîne en date to_date('05 Dec 2000', 'DD Mon YYYY')
to_number(text, text) numeric convertit une chaîne en champ de type numeric to_number('12,454.8-', '99G999D9S')
to_timestamp(text, text) timestamp with time zone convertit une chaîne string en champ de type timestamp to_timestamp('05 Dec 2000', 'DD Mon YYYY')
to_timestamp(double precision) timestamp with time zone convertit une valeur de type epoch UNIX en valeur de type timestamp to_timestamp(1284352323)

Dans une chaîne de motif pour to_char, il existe certains motifs qui sont reconnus et remplacés avec des données correctement formatées basées sur la valeur. Tout texte qui n'est pas un motif est copié sans modification. De façon similaire, dans toute chaîne de motif en entrée (tout sauf to_char), les motifs identifient les valeurs à fournir à la chaîne de données en entrée.

Le Tableau 9.21, « Modèles pour le formatage de champs de type date/heure » affiche les motifs disponibles pour formater les valeurs de types date et heure.

Tableau 9.21. Modèles pour le formatage de champs de type date/heure

Modèle Description
HH heure du jour (01-12)
HH12 heure du jour (01-12)
HH24 heure du jour (00-23)
MI minute (00-59)
SS seconde (00-59)
MS milliseconde (000-999)
US microseconde (000000-999999)
SSSS secondes écoulées depuis minuit (0-86399)
AM ou am ou PM ou pm indicateur du méridien (sans point)
A.M. ou a.m. ou P.M. ou p.m. indicateur du méridien (avec des points)
am ou a.m. ou pm ou p.m. indicateur du méridien (en minuscules)
Y,YYY année (quatre chiffres et plus) avec virgule
YYYY année (quatre chiffres et plus)
YYY trois derniers chiffres de l'année
YY deux derniers chiffres de l'année
Y dernier chiffre de l'année
IYYY année ISO (quatre chiffres ou plus)
IYY trois derniers chiffres de l'année ISO
IY deux derniers chiffres de l'année ISO
I dernier chiffre de l'année ISO
BC, bc, AD ou ad indicateur de l'ère (sans point)
B.C., b.c., A.D. ou a.d. indicateur de l'ère (avec des points)
MONTH nom complet du mois en majuscules (espaces de complètement pour arriver à neuf caractères)
Month nom complet du mois en casse mixte (espaces de complètement pour arriver à neuf caractères)
month nom complet du mois en minuscules (espaces de complètement pour arriver à neuf caractères)
MON abréviation du nom du mois en majuscules (trois caractères en anglais, la longueur des versions localisées peut varier)
Mon abréviation du nom du mois avec la première lettre en majuscule et les deux autres en minuscule (trois caractères en anglais, la longueur des versions localisées peut varier)
mon abréviation du nom du mois en minuscules (trois caractères en anglais, la longueur des versions localisées peut varier)
MM numéro du mois (01-12)
DAY nom complet du jour en majuscules (espaces de complètement pour arriver à neuf caractères)
Day nom complet du jour avec la première lettre en majuscule et les deux autres en minuscule (espaces de complètement pour arriver à neuf caractères)
day nom complet du jour en minuscules (espaces de complètement pour arriver à neuf caractères)
DY abréviation du nom du jour en majuscules (trois caractères en anglais, la longueur des versions localisées peut varier)
Dy abréviation du nom du jour avec la première lettre en majuscule et les deux autres en minuscule (trois caractères en anglais, la longueur des versions localisées peut varier)
dy abréviation du nom du jour en minuscules (trois caractères en anglais, la longueur des versions localisées peut varier)
DDD jour de l'année (001-366)
IDDD jour ISO de l'année (001-371 ; le jour 1 de l'année est le lundi de la première semaine ISO.)
DD jour du mois (01-31)
D jour de la semaine du dimanche (1) au samedi (7)
ID jour ISO de la semaine du lundi (1) au dimanche (7)
W numéro de semaine du mois, de 1 à 5 (la première semaine commence le premier jour du mois)
WW numéro de la semaine dans l'année, de 1 à 53 (la première semaine commence le premier jour de l'année)
IW numéro ISO de la semaine dans l'année (01 - 53 ; le premier jeudi de la nouvelle année est dans la semaine 1)
CC siècle (deux chiffres) (le 21è siècle commence le 1er janvier 2001)
J nombre de jours dans le calendrier Julien (nombre de jours depuis le 24 novembre -4714 à minuit)
Q trimestre (ignoré par to_date and to_timestamp)
RM mois en majuscule en nombre romain (I-XII ; I étant janvier) (en majuscules)
rm mois en minuscule en nombre romain (i-xii; i étant janvier) (en minuscules)
TZ nom en majuscule du fuseau horaire (en majuscules)
tz nom en minuscule du fuseau horaire (en minuscules)

Les modificateurs peuvent être appliqués à tous les motifs pour en changer le comportement. Par exemple, FMMonth est le motif Month avec le modificateur FM. Le Tableau 9.22, « Modificateurs de motifs pour le formatage des dates/heures » affiche les modificateurs de motifs pour le formatage des dates/heures.

Tableau 9.22. Modificateurs de motifs pour le formatage des dates/heures

Modificateur Description Exemple
préfixe FM mode remplissage (Fill Mode) (supprime les espaces et les zéros de complétion en fin) FMMonth
suffixe TH suffixe du nombre ordinal en majuscules, c'est-à-dire 12TH DDTH
suffixe th suffixe du nombre ordinal en minuscules, c'est-à-dire 12th DDth
préfixe FX option globale de format fixe (voir les notes d'utilisation) FX Month DD Day
préfixe TM mode de traduction (affiche les noms des jours et mois localisés en fonction de lc_time) TMMonth
suffixe SP mode épelé (Spell Mode) (non implanté) DDSP

Notes d'utilisation pour le formatage date/heure :

Le Tableau 9.23, « Motifs de modèle pour le formatage de valeurs numériques » affiche les motifs de modèle disponibles pour le formatage des valeurs numériques.

Tableau 9.23. Motifs de modèle pour le formatage de valeurs numériques

Motif Description
9 valeur avec le nombre indiqué de chiffres
0 valeur avec des zéros de début de chaîne
. (point) point décimal
, (virgule) séparateur de groupe (milliers)
PR valeur négative entre chevrons
S signe accroché au nombre (utilise la locale)
L symbole monétaire (utilise la locale)
D point décimal (utilise la locale)
G séparateur de groupe (utilise la locale)
MI signe moins dans la position indiquée (si le nombre est inférieur à 0)
PL signe plus dans la position indiquée (si le nombre est supérieur à 0)
SG signe plus/moins dans la position indiquée
RN numéro romain (saisie entre 1 et 3999)
TH ou th suffixe du nombre ordinal
V décalage du nombre indiqué de chiffres (voir les notes)
EEEE exposant pour la notation scientifique

Notes d'utilisation pour le formatage des nombres :

Certains modificateurs peuvent être appliqués à un motif pour modifier son comportement. Par exemple, FM9999 est le motif 9999 avec le modificateur FM. Tableau 9.24, « Modifications de motifs pour le formatage numérique » affiche les motifs pour le formatage numérique.

Tableau 9.24. Modifications de motifs pour le formatage numérique

Modificateur Description Exemple
préfixe FM mode de remplissage (supprime les blancs et zéros en fin de chaîne) FM9999
suffixe TH suffixe d'un nombre ordinal en majuscule 999TH
suffixe th suffixe d'un nombre ordinal en minuscule 999th

Le Tableau 9.25, « Exemples avec to_char » affiche quelques exemples de l'utilisation de la fonction to_char.

Tableau 9.25. Exemples avec to_char

Expression Résultat
to_char(current_timestamp, 'Day, DD  HH12:MI:SS') 'Tuesday  , 06  05:39:18'
to_char(current_timestamp, 'FMDay, FMDD  HH12:MI:SS') 'Tuesday, 6  05:39:18'
to_char(-0.1, '99.99') '  -.10'
to_char(-0.1, 'FM9.99') '-.1'
to_char(0.1, '0.9') ' 0.1'
to_char(12, '9990999.9') '    0012.0'
to_char(12, 'FM9990999.9') '0012.'
to_char(485, '999') ' 485'
to_char(-485, '999') '-485'
to_char(485, '9 9 9') ' 4 8 5'
to_char(1485, '9,999') ' 1,485'
to_char(1485, '9G999') ' 1 485'
to_char(148.5, '999.999') ' 148.500'
to_char(148.5, 'FM999.999') '148.5'
to_char(148.5, 'FM999.990') '148.500'
to_char(148.5, '999D999') ' 148,500'
to_char(3148.5, '9G999D999') ' 3 148,500'
to_char(-485, '999S') '485-'
to_char(-485, '999MI') '485-'
to_char(485, '999MI') '485 '
to_char(485, 'FM999MI') '485'
to_char(485, 'PL999') '+485'
to_char(485, 'SG999') '+485'
to_char(-485, 'SG999') '-485'
to_char(-485, '9SG99') '4-85'
to_char(-485, '999PR') '<485>'
to_char(485, 'L999') 'DM 485
to_char(485, 'RN') '        CDLXXXV'
to_char(485, 'FMRN') 'CDLXXXV'
to_char(5.2, 'FMRN') 'V'
to_char(482, '999th') ' 482nd'
to_char(485, '"Good number:"999') 'Good number: 485'
to_char(485.8, '"Pre:"999" Post:" .999') 'Pre: 485 Post: .800'
to_char(12, '99V999') ' 12000'
to_char(12.4, '99V999') ' 12400'
to_char(12.45, '99V9') ' 125'
to_char(0.0004859, '9.99EEEE') ' 4.86e-04'