Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment supprimer les espaces de fin après le nom du mois dans Oracle

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 ).