Si vous avez déjà utilisé le TO_CHAR()
pour formater une date qui utilise le nom du mois, vous avez peut-être remarqué que parfois le mois est renvoyé avec un rembourrage droit.
Cela se produit par défaut lorsque le nom du mois est plus court que le nom du mois le plus long, en fonction de la langue et du calendrier utilisés.
Par exemple, si votre langue est l'anglais et que le calendrier est grégorien, le nom de mois le plus long est septembre, qui comporte neuf caractères. Si vous renvoyez le mois à partir d'une date, et qu'il s'agit par exemple de mars (cinq caractères), alors par défaut, mars aura quatre espaces à la fin (5 + 4 =9).
Heureusement, il est facile de retirer ce rembourrage droit si nécessaire. Pour supprimer le bon rembourrage, utilisez le fm
modificateur de format.
Le problème
Tout d'abord, voici le problème que nous essayons de résoudre :
SELECT
TO_CHAR(date '2030-03-08', 'DD-MONTH-YYYY')
FROM DUAL;
Résultat :
08-MARCH -2030
Nous pouvons voir qu'il y a un grand écart entre le nom du mois et l'année. Si nous ne voulons pas cet écart, nous pouvons utiliser le fm
modificateur, comme indiqué ci-dessous.
La solution
Voici maintenant la solution :
SELECT
TO_CHAR(date '2030-03-08', 'fmDD-MONTH-YYYY')
FROM DUAL;
Résultat :
8-MARCH-2030
Maintenant, il n'y a plus d'écart entre le mois et l'année.
Tout ce que j'ai fait, c'est ajouter le modèle de format avec fm
.
Le fm
modificateur de format signifie "Mode de remplissage". Par défaut, Oracle utilise des caractères blancs de fin et des zéros de tête pour remplir les éléments de format à une largeur constante. La largeur est égale à la largeur d'affichage du plus grand élément pour le modèle de format concerné. Utilisation du fm
modificateur supprime tout ce remplissage.
Vous avez peut-être remarqué que le fm
modificateur a également supprimé le zéro non significatif sur le numéro du jour. Si nous ne voulons pas cela, nous pouvons placer le fm
modificateur devant le MONTH
élément de format à la place.
Comme ceci :
SELECT
TO_CHAR(date '2030-03-08', 'DD-fmMONTH-YYYY')
FROM DUAL;
Résultat :
08-MARCH -2030
Cette fois, le fm
n'a pas été appliqué au jour, mais il était appliqué au mois et à l'année.
Si nous ne voulons pas supprimer les zéros non significatifs de l'année, nous devons ajouter un autre fm
avant l'année.
Voici un exemple qui illustre ce que je veux dire :
SELECT
TO_CHAR(date '0030-03-08', 'DD-fmMONTH-YYYY') AS "r1",
TO_CHAR(date '0030-03-08', 'DD-fmMONTH-fmYYYY') AS "r2"
FROM DUAL;
Résultat :
r1 r2 ______________ ________________ 08-MARCH-30 08-MARCH-0030
La première colonne utilise un seul fm
(devant MONTH
).
La deuxième colonne utilise deux fm
modificateurs (un devant MONTH
, et un devant YYYY
).