sql >> Database teknologi >  >> RDS >> Oracle

Sådan fjerner du de efterfølgende mellemrum efter månedens navn i Oracle

Hvis du nogensinde har brugt TO_CHAR() funktion til at formatere en dato, der bruger månedsnavnet, har du måske bemærket, at måneden nogle gange returneres med højre polstring.

Dette sker som standard, når månedsnavnet er kortere end det længste månedsnavn, baseret på det sprog og den kalender, der bruges.

For eksempel, hvis dit sprog er engelsk, og kalenderen er gregoriansk, er den længste måneds navn september, som er ni tegn langt. Hvis du returnerer måneden fra en dato, og det siger marts (fem tegn lang), vil marts som standard have fire mellemrum (5 + 4 =9).

Heldigvis er det nemt at fjerne denne rigtige polstring, hvis det kræves. For at fjerne den rigtige polstring skal du bruge fm formatmodifikator.

Problemet

For det første, her er det problem, vi forsøger at løse:

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

Resultat:

8-MARCH -2030

Vi kan se, at der er en stor forskel mellem månedens navn og året. Hvis vi ikke ønsker dette hul, kan vi bruge fm modifikator, som vist nedenfor.

Løsningen

Nu er her løsningen:

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

Resultat:

8-MARCH-2030

Nu er der ingen afstand mellem måneden og året.

Alt, hvad jeg gjorde, var at sætte formatmodellen sammen med fm .

fm format modifier står for "Fill Mode". Som standard bruger Oracle efterfølgende tomme tegn og indledende nuller til at udfylde formatelementer til en konstant bredde. Bredden er lig med visningsbredden af ​​det største element for den relevante formatmodel. Brug af fm modifier undertrykker al sådan polstring.

Du har måske bemærket, at fm modifier undertrykte også det indledende nul på dagnummeret. Hvis vi ikke ønsker dette, kan vi placere fm modifikator foran MONTH formatelement i stedet.

Sådan:

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

Resultat:

08-MARCH-2030

Denne gang er fm blev ikke anvendt på dagen, men det var anvendes på måneden og året.

Hvis vi ikke ønsker at undertrykke foranstillede nuller fra året, skal vi tilføje endnu en fm før året.

Her er et eksempel, der illustrerer, hvad jeg mener:

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;

Resultat:

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

Den første kolonne bruger kun én fm (foran MONTH ).

Den anden kolonne bruger to fm modifikatorer (en foran MONTH , og en foran YYYY ).


  1. refererer fremmednøgle altid til en unik nøgle i en anden tabel?

  2. Arbejder dine medarbejdere på afstand? Sådan holder du dine data sikre.

  3. Brug NEWID() til at oprette en unik værdi i SQL Server

  4. Sådan parses JSON i postgresql