Fra SQL Server 2012 kan du formatere numeriske typer ved hjælp af T-SQL FORMAT()
fungere. Denne funktion accepterer tre argumenter; tallet, formatet og et valgfrit "kultur"-argument.
Det returnerer en formateret streng af typen nvarchar .
Formatet leveres som en formatstreng. En formatstreng definerer, hvordan outputtet skal formateres.
Her er et eksempel:
SELECT FORMAT(1, 'N');
Resultat:
1.00
I dette tilfælde brugte jeg N
som det andet argument. Dette er standard numerisk formatspecifikation for Number. Denne særlige formatspecifikation (N
) resulterer i, at outputtet formateres med integral- og decimalcifre, gruppeseparatorer og en decimalseparator med valgfrit negativt fortegn. Dette argument skelner mellem store og små bogstaver, så enten N
eller n
er fint.
Decimaler
Her er endnu et eksempel, denne gang ved hjælp af N1
for at angive, at vi kun vil have én decimal:
SELECT FORMAT(1, 'N1');
Resultat:
1.0
Men du kan også øge antallet af decimaler:
SELECT FORMAT(1, 'N7');
Resultat:
1.0000000
I disse eksempler er 1
og 7
er kendt som præcisionsspecifikationer .
Præcisionsspecifikationer er valgfrie. De kan være en værdi fra 0 til 99, som angiver nøjagtigheden af resultatet. Hvordan det fungerer afhænger af den formatspecifikation, der bruges. For nogle formatspecifikationer vil det angive det samlede antal cifre i resultatet, for andre vil det angive antallet af decimaler. I andre tilfælde vil det blive ignoreret helt. Se den fulde liste over standard numerisk format specifikationer for at se, hvordan præcisions specifikationer påvirker output fra hver format specifikator.
Procent
Følgende eksempler bruger P
argument, som formaterer tallet som en procentværdi. Den multiplicerer tallet med 100 og tilføjer derefter et lokaliseret procenttegn.
SELECT FORMAT(1, 'P') AS 'Example 1', FORMAT(.375, 'P') AS 'Example 2', FORMAT(.0375, 'P', 'tr-tr') AS 'Example 3';
Resultat:
Example 1 Example 2 Example 3 --------- --------- --------- 100.00 % 37.50 % %3,75
Bemærk, at "Eksempel 3" inkluderer et tredje argument, som specificerer den kultur, der skal bruges i outputtet. I dette tilfælde bruger jeg tr-tr
for tyrkisk. Dette resulterer i, at procenttegnet sættes foran tallet (i stedet for tilføjet, ligesom de andre). Det resulterer også i, at et komma bruges som decimalseparator.
Hvis du ikke angiver "kultur"-argumentet, bruges sproget for den aktuelle session.
Som du måske forestiller dig, kan du få helt forskellige resultater afhængigt af dit nuværende sprog eller værdien af ethvert "kultur"-argument. Se Hvordan sprogindstillinger kan påvirke dine FORMAT()-resultater for flere eksempler.
Valuta
Du kan bruge C
for at returnere en valutaværdi.
SELECT FORMAT(1, 'C');
Resultat:
$1.00
Du kan også tilføje lokaliteten som en tredje parameter.
Her er nogle eksempler:
SELECT FORMAT(1, 'C', 'fr-FR') AS France, FORMAT(1, 'C', 'th-TH') AS Thailand, FORMAT(1, 'C', 'ja-JP') AS Japan;
Resultat:
France Thailand Japan ------ -------- ----- 1,00 € ฿1.00 ¥1
Eksponentiel (videnskabelig)
Du kan bruge E
for at angive eksponentiel notation.
SELECT FORMAT(1234.56789, 'E');
Resultat:
1.234568E+003
Hexadecimal
Du kan endda formatere et tal som hexadecimalt. For at gøre dette skal du bruge X
argument:
SELECT FORMAT(10, 'X');
Resultat:
A
Hexadecimal er basis 16. Derfor går tallet 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, før det starter igen (f.eks. 10 i hexadecimal er det tilsvarende på 16 i decimal, og 11 svarer til 17 osv.). Det er derfor, eksemplet her resulterer i A
, fordi i hexadecimal, A
kommer efter 9
.
Her er endnu et eksempel, denne gang med et større antal:
SELECT FORMAT(7145, 'X');
Resultat:
1BE9
Brugerdefineret format
Du kan også oprette dit eget brugerdefinerede format ved at bruge en brugerdefineret numerisk formatstreng. Dette består af en række brugerdefinerede numeriske formatspecifikationer, der giver et mønster til dit nummer.
Dette er lettere forklaret med et eksempel:
SELECT FORMAT(123456789, '##-###-####');
Resultat:
12-345-6789
I dette tilfælde bruger jeg cifferpladsholderen (#
). Cifferpladsholderen giver mig mulighed for at angive et format for nummeret ved at bruge #
symbol som pladsholder for hvert tal.
Kommaer
Et andet eksempel:
SELECT FORMAT(123456789, '#,#');
Resultat:
123,456,789
Første nuller
En anden brugerdefineret numerisk formatspecifikation er nul (0
). Du kan bruge dette til at udfylde et tal med foranstillede nuller:
SELECT FORMAT(7, '000') AS 'Example 1', FORMAT(123, '0000') AS 'Example 2', FORMAT(123, '00000') AS 'Example 3';
Resultat:
Example 1 Example 2 Example 3 --------- --------- --------- 007 0123 00123
Du kan også bruge det til at fjerne nuller:
SELECT FORMAT(0123, '000') AS 'Example 1', FORMAT(0123, '0000') AS 'Example 2', FORMAT(000123, '00000') AS 'Example 3';
Resultat:
Example 1 Example 2 Example 3 --------- --------- --------- 123 0123 00123
Numerisk formatspecifikationsreference
De følgende artikler indeholder alle de numeriske formatspecifikationer, du kan bruge med FORMAT()
funktion sammen med T-SQL-eksempler.
- Standard numerisk formatstrenge
- Tilpassede numeriske formatstrenge
Dette er de samme formatspecifikationer, som understøttes af .NET Framework (FORMAT()
funktion er afhængig af .NET Framework).
Dato og tid
FORMAT()
funktionen giver dig også mulighed for at formatere dato og klokkeslæt.
Dato og klokkeslæt har et separat sæt formatspecifikationer:
- Standard dato- og tidsformatstrenge
- Tilpassede dato- og tidsformatstrenge