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

Sådan fjerner du den rigtige polstring på dagsnavnet i Oracle

I Oracle Database, når du bruger TO_CHAR() funktion til at returnere dagsnavnet fra en dato, vil udfyldning blive tilføjet til dagsnavnet, hvis det er kortere end det længste gyldige dagnavn for det givne sprog og kalender.

Nå, det er standardadfærden. Du kan dog ændre dette, hvis du ønsker det.

For at undertrykke denne polstring er alt, hvad du skal gøre, at sætte fm foran dagsnavnsformatelementet .

Eksempel

Antag, at vi kører følgende kode:

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

Resultat:

Friday   , 08 March     2030

Vi kan se, at efterfølgende mellemrum er blevet tilføjet til dagsnavnet og månedsnavnet.

Vi kan bruge fm formatmodifikator for at undertrykke dette mellemrum:

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

Resultat:

Friday   , 08 March     2030

Problem løst.

Bemærk, at dette også havde den sidegevinst, at det undertrykkede de efterfølgende mellemrum fra månedens navn.

Det undertrykte også det indledende nul fra dagnummeret.

Vi kan bruge flere fm modifikatorer for at være mere specifik om, hvilken polstring vi ønsker at undertrykke. Hver fm i vores format skifter model udfyldningstilstand til og fra.

Antag, at vi ønsker at undertrykke de efterfølgende mellemrum fra dag- og månedsnavnene, men vi ønsker at beholde det indledende nul på dagnummeret. I så fald kan vi gøre følgende:

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

Resultat:

Friday   , 08 March     2030

Grunden til at vi brugte en tredje fm (foran MONTH ) er fordi den anden fm genaktiverede polstring for alle efterfølgende formatelementer, hvilket ville resultere i, at de efterfølgende mellemrum blev bibeholdt for måneden.

Her er hvad jeg mener:

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

Resultat:

Friday, 08 March     2030 

I dette tilfælde blev udfyldning undertrykt fra dagsnavnet og derefter genaktiveret for dagnummer, måned og år.

Heldigvis kan vi tilføje lige så mange fm modifikatorer, som vi har brug for for at få det ønskede resultat.


  1. Skal hver SQL Server-fremmednøgle have et matchende indeks?

  2. SQL Server indsæt, hvis ikke eksisterer bedste praksis

  3. Hvornår har Postgres kolonne- eller tabelnavne brug for anførselstegn, og hvornår behøver de ikke?

  4. er der nogen måde at logge alle mislykkede sql-sætninger i oracle 10g