När du arbetar med Postgres kan du använda to_char()
funktion för att mata ut tal i ett givet format.
Hur det fungerar är att du ger två argument. Det första argumentet är talet som ska formateras. Det andra argumentet avgör hur det formateras.
Returvärdet är text .
Beroende på dina krav kanske du föredrar att konvertera numret till lämplig datatyp, till exempel med cast()
funktion.
Exempel på båda metoderna finns nedan.
Exempel
Här är ett grundläggande exempel att visa.
SELECT to_char(10, '99.99');
Resultat:
10.00
9
s har faktiskt speciell betydelse i detta sammanhang. Det här tecknet är ett av de giltiga mallmönster som din formatsträng kan bestå av när du formaterar siffror.
I fallet med 9
, den anger en sifferposition, men om det är en inledande nolla kommer den att ersättas av ett mellanslag, medan om det är en avslutande nolla och fyllningsläge anges så kommer den att raderas.
Om jag tar bort decimalen och bråkdelssekundersdelen får jag ett annat resultat.
SELECT to_char(10, '99');
Resultat:
10
Släpp inledande nollor
Du kan ersätta 9
med 0
om du vill undertrycka inledande och efterföljande nollor, även när det är obetydligt.
Här är ett exempel som visar skillnaden mellan de två.
SELECT
to_char(0010, '9999') AS "9999",
to_char(0010, '0000') AS "0000";
Resultat:
9999 | 0000 -------+------- 10 | 0010
Mallmönster
Som framgår av de tidigare exemplen består formatsträngen av ett eller flera mallmönster.
Till exempel 9999
är en formatsträng som består av fyra mallmönster – var och en är 9
.
Decimalen är ett annat mallmönster.
Jag kunde ha använt en D
istället för decimalen. Som använder den aktuella lokalen för den faktiska formateringen.
SELECT
to_char(10, '99.99') AS "99.99",
to_char(10, '99D99') AS "99D99";
Resultat:
99.99 | 99D99 --------+-------- 10.00 | 10.00
För en fullständig lista över mallmönster och modifierare, se Mallmönster och modifierare för numerisk formatering i Postgres.
Mallmönstermodifierare
Det finns också några modifierare som kan användas tillsammans med mallmönstret. Dessa ändrar hur utdata formateras, beroende på vilken modifierare som används.
Specifikt finns det tre modifierare som kan användas med numerisk formatering.
Modifierare | Beskrivning |
---|---|
FM prefix | fyllningsläge (dämpa efterföljande nollor och utfyllnadsblanketter) |
TH suffix | versal ordningsnummersuffix |
th suffix | suffix för ordningstal med små bokstäver |
Observera att den första läggs till som ett prefix till mallmönstret och de andra två läggs till som ett suffix.
Ordningsnummer
Ett vanligt krav är att konvertera ett tal till dess ordningsföljd. Vi kan använda antingen TH
eller th
för det, beroende på om vi vill att suffixet ska vara versaler eller gemener.
Här är ett exempel.
SELECT to_char(03, 'FM99th');
Resultat:
3rd
I det här fallet använde jag också FM
för att undertrycka alla tomrum och avslutande nollor.
Här är en jämförelse mellan att använda FM
och utelämna det:
SELECT
to_char(03, '99th') AS "99th",
to_char(03, 'FM99th') AS "FM99th";
Resultat:
99th | FM99th -------+-------- 3rd | 3rd
Om du tittar noga har den första kolumnen inledande tomrum, medan den andra kolumnen inte har det.
Valuta
Ett annat vanligt krav är att mata ut ett nummer i en given valuta.
I det här fallet kan vi använda L
mallmönster för att visa en lokal-medveten valutasymbol.
SELECT to_char(03, 'LFM99D00');
Resultat:
$3.00
Signerade nummer
Det finns också mallmönster för signerade nummer.
Här är ett exempel.
SELECT to_char(27, 'S99');
Resultat:
+27
Här använde jag S
för att lägga till en platsmedveten skylt som är förankrad i numret.
I det här fallet var det ett positivt tal. Här är ett annat exempel som använder ett negativt värde.
SELECT to_char(-27, 'S99');
Resultat:
-27
Det finns flera andra mallmönster som kan användas för signerade nummer.
För exempel, se Lägg till ett plus-/minustecken till ett nummer i Postgres.
Och som nämnt, kolla in mallmönster och modifierare för numerisk formatering i Postgres för en fullständig lista över mallmodifierare som du kan använda när du formaterar tal.
Datatyp
Som nämnts, to_char()
funktionen matar ut sitt resultat som text .
Beroende på dina krav kanske du tycker att det är bättre att konvertera numret till en mer lämplig datatyp.
Här är ett exempel som konverterar ett nummer till pengardata typ.
SELECT cast(10 as money);
Resultat:
$10.00