9.7. Fonctions de formatage des types de données

Les fonctions de formatage de PostgreSQL fournissent un ensemble d'outils puissants pour convertir différent types de données (date/heure, entier, nombre à virgule flottante, numérique) en des chaînes formatées et pour convertir des chaînes formatées en des types de données spécifiques. Tableau 9-20 les listes. Ces fonctions suivent toutes une convention d'appels commune : 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.

Tableau 9-20. Fonctions de formatage

FonctionType en retourDescriptionExemple
to_char(timestamp, text)textconvertit un champ date/heure (timestamp) en une chaîneto_char(current_timestamp, 'HH12:MI:SS')
to_char(interval, text)textconvertit un champ de type interval en une chaîneto_char(interval '15h 2m 12s', 'HH24:MI:SS')
to_char(int, text)textconvertit un champ de type integer en une chaîneto_char(125, '999')
to_char(double precision, text)textconvertit un champ de type real/double precision en une chaîneto_char(125.8::real, '999D9')
to_char(numeric, text)textconvertit un champ de type numeric en une chaîneto_char(-125.8, '999D99S')
to_date(text, text)dateconvertit une chaîne en dateto_date('05 Dec 2000', 'DD Mon YYYY')
to_timestamp(text, text)timestampconvertit une chaîne string en un champ de type timestampto_timestamp('05 Dec 2000', 'DD Mon YYYY')
to_number(text, text)numericconvertit une chaîne en champ de type numericto_number('12,454.8-', '99G999D9S')

Attention : to_char(interval, text) est obsolète et ne devrait plus être utilisé dans du code nouvellement écrit. Elle sera supprimée dans la prochaine version.

Dans une chaîne modèle en sortie (for to_char), certains modèles sont reconnus et remplacés avec les données proprement formatées à partir de la valeur à formater. Tout texte qui n'est pas un modèle est copié sans modification. De même, sur une chaîne modèle en entrée (pour tout sauf to_char), les modèles identifient les parties de la chaîne en entrée à récupérer et les valeurs à trouver.

Tableau 9-21 affiche les modèles 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èleDescription
HHheure du jour (01-12)
HH12heure du jour (01-12)
HH24heure du jour (00-23)
MIminute (00-59)
SSseconde (00-59)
MSmilliseconde (000-999)
USmicroseconde (000000-999999)
SSSSsecondes passées depuis minuit (0-86399)
AM ou A.M. ou PM ou P.M.indicateur du méridien (en majuscule)
am ou a.m. ou pm ou p.m.indicateur du méridien (en minuscule)
Y,YYYannée (4 chiffres et plus) avec virgule
YYYYyear (quatre chiffres et plus)
YYYles trois derniers chiffres de l'année
YYles deux derniers chiffres de l'année
Yle dernier chiffre de l'année
BC ou B.C. ou AD ou A.D.indicateur de l'ère (majuscule)
bc ou b.c. ou ad ou a.d.indicateur de l'ère (minuscule)
MONTHnom complet du mois en majuscule (espaces ajoutés pour arriver à neuf caractères)
Monthnom complet du mois (espaces ajoutés pour arriver à neuf caractères)
monthnom complet du mois en minuscule (espaces ajoutés pour arriver à neuf caractères)
MONabréviation du nom du mois en majuscule (trois caractères)
Monabréviation du nom du mois (trois caractères)
monabréviation du nom du mois en minuscule (trois caractères)
MMnuméro du mois (01-12)
DAYnom complet du jour en majuscule (espaces ajoutés pour arriver à neuf caractères)
Daynom complet du jour (espaces ajoutés pour arriver à neuf caractères)
daynom complet du jour en minuscule (espaces ajoutés pour arriver à neuf caractères)
DYabréviation du nom du jour en majuscule (3 caractères)
Dyabréviation du nom du jour (3 caractères)
dyabréviation du nom du jour en minuscule (3 caractères)
DDDjour de l'année (001-366)
DDjour du mois (01-31)
Djour de la semaine (de 1 à 7, dimanche étant le 1)
Wnuméro de semaine du mois (de 1 à 5) (la première semaine commence le premier jour du mois.)
WWnuméro de semaine dans l'année (de 1 à 53) (la première semaine commence le premier jour de l'année.)
IWnuméro de semaine ISO de l'année (le premier jeudi de la nouvelle année correspond à la semaine 1.)
CCsiècle (2 chiffres)
JJulian Day (nombre de jours depuis le 1er janvier 4712 avant JC)
Qtrimestre
RMmois en nombre romain (I-XII ; I étant janvier) (en majuscule)
rmmois en nombre romain (i-xii; i étant janvier) (en minuscule)
TZnom du fuseau horaire (en majuscule)
tznom du fuseau horaire (en minuscule)

Certains modificateurs peuvent être appliqués à tout modèle pour changer leur comportement. Par exemple, FMMonth est le modèle Month avec le modificateur FM. Tableau 9-22 affiche les modificateurs de modèles pour le formatage des dates/heures.

Tableau 9-22. Modificateurs de modèles pour le formatage des dates/heures

ModificateurDescriptionExemple
préfixe FMmode remplissage (supprime les espaces et les zéros)FMMonth
suffixe THsuffixe du nombre ordinal en majusculeDDTH
suffixe thsuffixe du nombre ordinal en minusculeDDth
préfixe FXoption global de format fixé (voir les notes d'utilisation)FX Month DD Day
suffixe SPmode épeler (pas encore implémenté)DDSP

Notes d'utilisation pour le formatage date/heure :

Tableau 9-23 affiche les modèles disponibles pour le formatage des valeurs numériques.

Tableau 9-23. Modèles pour le formatage de valeurs numériques

ModèleDescription
9valeur avec le nombre spécifié de chiffres
0valeur avec des zéros de remplissage
. (point)point décimal
, (virgule)séparateur de groupe (milliers)
PRvaleur négative entre crochets
Ssigne accroché au nombre (utilise la locale)
Lsymbole monétaire (utilise la locale)
Dpoint décimale (utilise la locale)
Gséparateur de groupe (utilise la locale)
MIsigne moins dans la position spécifiée (si le nombre est inférieur à 0)
PLsigne plus dans la position spécifiée (si le nombre est supérieur à 0)
SGsigne plus/moins dans la position spécifiée
RNnuméro romain (entrée entre 1 et 3999)
TH ou thsuffixe du nombre ordinal
Vdécalage d'un nombre spécifié de chiffres (voir les notes)
EEEEnotation scientifique (pas encore implémentée)

Notes d'utilisation pour le formatage des nombres :

Tableau 9-24 affiche quelques exemples de l'utilisation de la fonction to_char.

Tableau 9-24. Exemples avec to_char

ExpressionRé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'