I Oracle Database, när du använder TO_CHAR()
funktion för att returnera dagsnamnet från ett datum, utfyllnad kommer att läggas till i dagsnamnet om det är kortare än det längsta giltiga dagsnamnet för det givna språket och kalendern.
Tja, det är standardbeteendet. Du kan dock ändra detta om du vill.
För att undertrycka denna utfyllnad behöver du bara lägga till fm
för formatelementet för dagnamnet. .
Exempel
Anta att vi kör följande kod:
SELECT
TO_CHAR(date '2030-03-08', 'Day, DD Month YYYY')
FROM DUAL;
Resultat:
Friday , 08 March 2030
Vi kan se att efterföljande mellanslag har lagts till i dagnamnet och månadsnamnet.
Vi kan använda fm
formatmodifierare för att dölja detta utrymme:
SELECT
TO_CHAR(date '2030-03-08', 'fmDay, DD Month YYYY')
FROM DUAL;
Resultat:
Friday , 08 March 2030
Problem löst.
Lägg märke till att detta också hade sidofördelen att undertrycka de efterföljande mellanslagen från månadsnamnet.
Den undertryckte också den inledande nollan från dagnumret.
Vi kan använda flera fm
modifierare för att vara mer specifik om vilken utfyllnad vi vill undertrycka. Varje fm
i vårt format växlar modellen fyllningsläge på och av.
Anta att vi vill dämpa de efterföljande mellanrummen från dag- och månadsnamnen, men vi vill behålla den inledande nollan på dagnumret. I så fall kan vi göra följande:
SELECT
TO_CHAR(date '2030-03-08', 'fmDay, fmDD fmMonth YYYY')
FROM DUAL;
Resultat:
Friday , 08 March 2030
Anledningen till att vi använde en tredje fm
(framför MONTH
) beror på att den andra fm
återaktiverade utfyllnad för alla efterföljande formatelement, vilket skulle resultera i att de efterföljande utrymmena behölls för månaden.
Så här menar jag:
SELECT
TO_CHAR(date '2030-03-08', 'fmDay, fmDD Month YYYY')
FROM DUAL;
Resultat:
Friday, 08 March 2030
I det här fallet undertrycktes utfyllnad från dagnamnet och återaktiverades sedan för dagnummer, månad och år.
Lyckligtvis kan vi lägga till så många fm
modifierare som vi behöver för att få önskat resultat.