I Postgres, to_char()
är en datatypsformateringsfunktion som konverterar sitt första argument till en sträng.
Formatet på strängen bestäms av det andra argumentet.
to_char()
funktionen kan användas för att göra följande konverteringar:
- tidsstämpel till sträng
- intervall till sträng
- heltal till sträng
- verklig/dubbel precision till sträng
- numerisk till sträng
Syntax
Syntaxen ser ut så här:
to_char(timestamp, text)
to_char(interval, text)
to_char(int, text)
to_char(double precision, text)
to_char(numeric, text)
Där det första argumentet är värdet som ska konverteras (i någon av de listade datatyperna) och text
är en formatsträng för att formatera det första argumentet.
Exempel
Här är ett exempel på hur du formaterar ett datumvärde:
SELECT to_char(date '2020-12-25', 'Day, DD Month YYYY');
Resultat:
Friday , 25 December 2020
I det här fallet formatsträngen Day, DD Month YYYY
bestämmer hur datumet formateras när det returneras som en sträng av to_char()
.
Mallmönster
Formatsträngen består av ett eller flera mallmönster .
I föregående exempel var min formatsträng Day, DD Month YYYY
. Därför bestod den av följande mallmönster:
Day
DD
Month
YYYY
Jag kunde ha använt mer eller mindre mallmönster, och resultatet hade varit annorlunda.
Jag kunde till exempel ha gjort följande:
SELECT to_char(date '2020-12-25', 'Day');
Resultat:
Friday
Alternativt kunde min formatsträng ha bestått av en annan serie mallmönster helt och hållet.
Till exempel:
SELECT to_char(date '2020-12-25', 'Dy, DD Mon YY');
Resultat:
Fri, 25 Dec 20
Mallmönstermodifierare
Du kan också lägga till mallmönstermodifierare till din formatsträng.
Resultatet kommer att vara något annorlunda beroende på vilken modifierare som används.
Exempelvis presenterar följande exempel dagen i månaden som ett ordningsnummer.
SELECT to_char(date '2020-12-25', 'Day, DDth Month YYYY');
Resultat:
Friday , 25 December 2020
Detta är samma som det första exemplet men skillnaden är att jag lade till den th
mallmodifierare som ett suffix till DD
mall mönster. Detta lägger till ordningsnummersuffixet till dagen i månaden.
Därför hamnar vi på 25:e istället för bara 25 .
För att betona effekten av mallmodifieraren, så här ser den ut när den tillämpas på olika värden.
SELECT
to_char(date '2020-12-01', 'DDth') AS "1",
to_char(date '2020-12-02', 'DDth') AS "2",
to_char(date '2020-12-03', 'DDth') AS "3",
to_char(date '2020-12-04', 'DDth') AS "4";
Resultat:
1 | 2 | 3 | 4 ------+------+------+------ 01st | 02nd | 03rd | 04th
Jag skulle kunna lägga till ytterligare en modifierare för att undertrycka de inledande nollorna om det behövs.
SELECT
to_char(date '2020-12-01', 'FMDDth') AS "1",
to_char(date '2020-12-02', 'FMDDth') AS "2",
to_char(date '2020-12-03', 'FMDDth') AS "3",
to_char(date '2020-12-04', 'FMDDth') AS "4";
Resultat:
1 | 2 | 3 | 4 -----+-----+-----+----- 1st | 2nd | 3rd | 4th
I det här fallet lade jag till FM
som är för "fyllningsläge". Denna modifierare undertrycker inledande nollor och utfyllnadsblanketter.
Numerisk
Det föregående exemplet kan också tillämpas på numeriska värden.
Men när du använder numeriska värden måste du byta D
med antingen 9
eller 0
.
SELECT
to_char(1, '9th') AS "1",
to_char(2, '9th') AS "2",
to_char(3, '9th') AS "3",
to_char(4, '9th') AS "4";
Resultat:
1 | 2 | 3 | 4 ------+------+------+------ 1st | 2nd | 3rd | 4th
Lista över mallmönster och modifierare
De faktiska mallmönster som du kan använda beror på om du formaterar ett datum-/tidsvärde eller ett tal.
För en fullständig lista över tillgängliga mallmönster, se:
- Mallmönster och modifierare för formatering av datum/tid
- Mallmönster och modifierare för numerisk formatering