sql >> Databáze >  >> RDS >> Oracle

Jak odstranit koncové mezery za názvem měsíce v Oracle

Pokud jste někdy použili TO_CHAR() Pokud chcete formátovat datum, které používá název měsíce, možná jste si všimli, že někdy je měsíc vrácen se správným odsazením.

Ve výchozím nastavení se to stane, když je název měsíce kratší než nejdelší název měsíce, podle používaného jazyka a kalendáře.

Pokud je například vaším jazykem angličtina a kalendář je gregoriánský, nejdelší název měsíce je září, který má devět znaků. Pokud vrátíte měsíc z data a je to řekněme Březen (pět znaků), pak bude mít březen ve výchozím nastavení čtyři mezery na konci (5 + 4 =9).

Naštěstí je snadné toto pravé vycpávky v případě potřeby odstranit. Chcete-li odstranit správnou výplň, použijte fm modifikátor formátu.

Problém

Za prvé, zde je problém, který se snažíme vyřešit:

SELECT 
    TO_CHAR(date '2030-03-08', 'DD-MONTH-YYYY')
FROM DUAL;

Výsledek:

08-MARCH    -2030

Vidíme, že mezi názvem měsíce a rokem je velká mezera. Pokud tuto mezeru nechceme, můžeme použít fm modifikátor, jak je uvedeno níže.

Řešení

Nyní je řešení:

SELECT 
    TO_CHAR(date '2030-03-08', 'fmDD-MONTH-YYYY')
FROM DUAL;

Výsledek:

8-MARCH-2030

Nyní mezi měsícem a rokem není žádná mezera.

Vše, co jsem udělal, bylo, že jsem před formátový model přidal fm .

fm Modifikátor formátu znamená „Režim plnění“. Ve výchozím nastavení Oracle používá koncové prázdné znaky a úvodní nuly k vyplnění prvků formátu na konstantní šířku. Šířka se rovná šířce zobrazení největšího prvku pro příslušný model formátu. Pomocí fm modifikátor potlačí všechny takové výplně.

Možná jste si všimli, že fm modifikátor také potlačil úvodní nulu v čísle dne. Pokud to nechceme, můžeme umístit fm modifikátor před MONTH formátovací prvek.

Takhle:

SELECT 
    TO_CHAR(date '2030-03-08', 'DD-fmMONTH-YYYY')
FROM DUAL;

Výsledek:

08-MARCH-2030

Tentokrát fm nebylo použito na daný den, ale bylo platí pro měsíc a rok.

Pokud nechceme potlačit úvodní nuly z roku, musíme přidat další fm před rokem.

Zde je příklad, který ilustruje, co mám na mysli:

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;

Výsledek:

            r1               r2 
______________ ________________ 
08-MARCH-30    08-MARCH-0030   

První sloupec používá pouze jeden fm (před MONTH ).

Druhý sloupec používá dva fm modifikátory (jeden před MONTH a jeden před YYYY ).


  1. FORMAT() Příklady v MySQL

  2. Jak uniknout % z dotazu python mysql

  3. Jak používat příkaz SQLite Dump

  4. Nepovinné argumenty v klauzuli WHERE