Den här artikeln ger en referens till standardspecifikationerna för numeriska format som kan användas när du formaterar tal med FORMAT()
funktion i SQL Server. Exempel ingår.
Vissa av exemplen använder precisionsspecifikationer (dessa består av en eller två siffror som läggs till formatspecifikationen). Precisionsspecifikationer kan vara ett värde från 0 till 99, vilket anger precisionen för resultatet. Hur det fungerar beror på vilken formatspecifikation som används. För vissa formatspecifikationer kommer det att ange det totala antalet siffror i resultatet, för andra kommer det att ange antalet decimaler. I andra fall kommer den att ignoreras helt och hållet.
Formatera sträng | Beskrivning/exempel |
---|---|
C eller c | Valuta . Konverterar talet till en sträng som representerar ett valutabelopp. En valfri precisionsspecifikator kan användas för att ange antalet decimaler. Exempel (med olika kulturer) : SELECT FORMAT(12.34, 'C', 'en-us') R1, FORMAT(012.34, 'C', 'iv') R2, FORMAT(12.34, 'C0', 'ja-jp') R3, FORMAT(12.54, 'c', 'vi-vn') R4, FORMAT(12.54, 'c0', 'en-au') R5, FORMAT(12.54, 'c4', 'en-gb') R6; +--------+--------+------+---------+------+----------+ | R1 | R2 | R3 | R4 | R5 | R6 | |--------+--------+------+---------+------+----------| | $12.34 | ¤12.34 | ¥12 | 12,54 ₫ | $13 | £12.5400 | +--------+--------+------+---------+------+----------+ |
D eller d | Decimal . Konverterar talet till en sträng med decimalsiffror (0-9), med ett minustecken prefixet om talet är negativt. Det här formatet stöds endast för integraltyper. Om den (valfria) precisionsspecifikationen används anger den det totala antalet siffror i resultatet. Om numret inte har så många siffror kommer det att fyllas med nollor till vänster. Exempel : SELECT FORMAT(123, 'D') R1, FORMAT(123, 'D0') R2, FORMAT(123, 'D3') R3, FORMAT(123, 'd4') R4, FORMAT(0123, 'd5') R5, FORMAT(1.23, 'd') R6; +------+------+------+------+-------+------+ | R1 | R2 | R3 | R4 | R5 | R6 | |------+------+------+------+-------+------| | 123 | 123 | 123 | 0123 | 00123 | NULL | +------+------+------+------+-------+------+ |
E eller e | Exponentiell (vetenskaplig) . Konverterar talet till en sträng av formen "-d.ddd...E+ddd" eller "-d.ddd...e+ddd", där varje "d" indikerar en siffra (0-9). Strängen börjar med ett minustecken om talet är negativt. Exakt en siffra föregår alltid decimalkomma. Om en precisionsspecifikator används, anger den hur många siffror som finns till höger om decimalkomma. Om det utelämnas kommer sex siffror att visas till höger om decimaltecknet. Exempel : SELECT FORMAT(1024.1234567, 'E') R1, FORMAT(1024.1234567, 'E0') R2, FORMAT(1024.1234567, 'E3') R3, FORMAT(1024.1234567, 'e4') R4, FORMAT(1024.1234567, 'e7') R5; +---------------+--------+------------+-------------+----------------+ | R1 | R2 | R3 | R4 | R5 | |---------------+--------+------------+-------------+----------------| | 1.024123E+003 | 1E+003 | 1.024E+003 | 1.0241e+003 | 1.0241235e+003 | +---------------+--------+------------+-------------+----------------+ |
F eller f | Fast punkt . Konverterar talet till en sträng av formen "-ddd.ddd..." där varje "d" indikerar en siffra (0-9). Strängen börjar med ett minustecken om talet är negativt. En valfri precisionsspecifikator kan användas för att ange antalet decimaler. Exempel : SELECT FORMAT(12.345, 'F', 'en-us') R1, FORMAT(12.345, 'F0', 'en-us') R2, FORMAT(12.345, 'f3', 'en-us') R3, FORMAT(12.345, 'f4', 'en-us') R4, FORMAT(12.345, 'f5', 'en-us') R5, FORMAT(12.345, 'f', 'vi-vn') R6; +-------+------+--------+---------+----------+-------+ | R1 | R2 | R3 | R4 | R5 | R6 | |-------+------+--------+---------+----------+-------| | 12.35 | 12 | 12.345 | 12.3450 | 12.34500 | 12,35 | +-------+------+--------+---------+----------+-------+ |
G eller g | Allmänt . Konverterar numret till det mer kompakta av antingen fixpunkts- eller vetenskaplig notation, beroende på typen av siffra och om en precisionsspecifikator finns. Om den (valfria) precisionsspecifikationen används, definierar den det maximala antalet signifikanta siffror som kan visas i resultatsträngen. Om det utelämnas, eller om värdet är noll, bestäms precisionen av nummertypen.
Se den officiella .NET-dokumentationen för en förklaring av hur nummertypen kan påverka precisionen. Du kan behöva korshänvisa det till den officiella dokumentationen för Exempel : SELECT FORMAT(12.345, 'G', 'en-us') R1, FORMAT(12.345, 'G0', 'en-us') R2, FORMAT(12.345, 'g3', 'en-us') R3, FORMAT(12.345, 'g4', 'en-us') R4, FORMAT(12.345, 'g5', 'en-us') R5, FORMAT(12.345, 'g', 'vi-vn') R6; +--------+--------+------+-------+--------+--------+ | R1 | R2 | R3 | R4 | R5 | R6 | |--------+--------+------+-------+--------+--------| | 12.345 | 12.345 | 12.3 | 12.35 | 12.345 | 12,345 | +--------+--------+------+-------+--------+--------+ |
N eller n | Nummer . Konverterar talet till en sträng av formen "-d,ddd,ddd.ddd...". Om den (valfria) precisionsspecifikationen används definierar den antalet siffror till höger om decimaltecknet. Exempel : SELECT FORMAT(1234.56, 'N', 'en-us') R1, FORMAT(1234.56, 'N0', 'en-us') R2, FORMAT(1234.56, 'n3', 'en-us') R3, FORMAT(1234.56, 'n4', 'en-us') R4, FORMAT(1234.56, 'n', 'vi-vn') R5; +----------+-------+-----------+------------+----------+ | R1 | R2 | R3 | R4 | R5 | |----------+-------+-----------+------------+----------| | 1,234.56 | 1,235 | 1,234.560 | 1,234.5600 | 1.234,56 | +----------+-------+-----------+------------+----------+ |
P eller p | Procent . Multiplicerar talet med 100 och omvandlar det till en sträng som representerar en procentsats. Om precisionsspecifikationen används definierar den antalet decimaler. Exempel : SELECT FORMAT(.1234, 'P', 'en-us') R1, FORMAT(.1234, 'P0', 'en-us') R2, FORMAT(.1250, 'p0', 'en-us') R3, FORMAT(.1250, 'p3', 'en-us') R4, FORMAT(.1250, 'p', 'vi-vn') R5; +---------+------+------+----------+--------+ | R1 | R2 | R3 | R4 | R5 | |---------+------+------+----------+--------| | 12.34 % | 12 % | 13 % | 12.500 % | 12,50% | +---------+------+------+----------+--------+ |
R eller r | tur och retur . Försöker att säkerställa att ett numeriskt värde som konverteras till en sträng tolkas tillbaka till samma numeriska värde. Precisionsspecifikationen ignoreras när du använder den här formatspecifikationen. OBS :I .NET stöds denna formatspecifikation endast av Singel , Dubbel och BigInteger nummertyper. Även för Dubbel värden, misslyckas denna formatspecifikator i vissa fall att framgångsrikt runda det ursprungliga värdet. Den ger också dålig prestanda när den används med Dubbel och Singel typer.
Vidare rekommenderar .NET-dokumentationen att denna formatspecifikation används för BigInteger endast typ. Den rekommenderar att Dubbel typer använder
Vad betyder detta för SQL Server? I grund och botten bör du förmodligen undvika denna formatspecifikation i SQL Server. Använd istället
Exempel DECLARE @myFloat float, @myReal real; SET @myFloat = '123456789.1234567'; SET @myReal = @myFloat; SELECT @myFloat 'Float Value', @myReal 'Real Value'; SELECT FORMAT(@myFloat, 'R') 'Float R', FORMAT(@myFloat, 'G17') 'Float G17', FORMAT(@myReal, 'R') 'Real R', FORMAT(@myReal, 'G9') 'Real G9'; +------------------+--------------+ | Float Value | Real Value | |------------------+--------------| | 123456789.123457 | 1.234568E+08 | +------------------+--------------+ (1 row affected) +-------------------+-------------------+-----------+-----------+ | Float R | Float G17 | Real R | Real G9 | |-------------------+-------------------+-----------+-----------| | 123456789.1234567 | 123456789.1234567 | 123456792 | 123456792 | +-------------------+-------------------+-----------+-----------+ (1 row affected) |
X eller x | Hexadecimal . Konverterar talet till en sträng med hexadecimala siffror.
Det använda fallet (dvs. Denna formatspecifikation stöds endast för integraltyper. Om den (valfria) precisionsspecifikationen används anger den det totala antalet siffror i resultatet. Om numret inte har så många siffror kommer det att fyllas med nollor till vänster. Exempel : SELECT FORMAT(123, 'X') R1, FORMAT(123, 'x') R2, FORMAT(123, 'x6') R3, FORMAT(12345678, 'x') R4, FORMAT(123, 'x6') R5, FORMAT(-123, 'x') R6, FORMAT(1.23, 'X') R7; +------+------+--------+--------+--------+----------+------+ | R1 | R2 | R3 | R4 | R5 | R6 | R7 | |------+------+--------+--------+--------+----------+------| | 7B | 7b | 00007b | bc614e | 00007b | ffffff85 | NULL | +------+------+--------+--------+--------+----------+------+ |
Listan ovan är en komplett lista över giltiga strängar för anpassat numeriskt .NET-format, baserat på informationen från den officiella .NET-dokumentationen för standardsträngar för numeriskt format på Microsofts webbplats i skrivande stund.
Anledningen till att dessa är relevanta för SQL Server FORMAT()
Funktionen är att den här funktionen endast accepterar giltiga .NET Framework-formatsträngar.
Förutom ovanstående standard formatsträngar kan du också använda anpassad formatera strängar. Här är en fullständig lista över anpassade numeriska formatsträngar som du kan använda med SQL Server.
Du kan också formatera datum- och tidsvärden. Se listan över standardsträngar för datum- och tidsformat samt anpassade datum- och tidsformatsträngar som du kan använda med FORMAT()
funktion.
Om du fortfarande försöker förstå vad en formatsträng ens är, se Vad är en formatsträng i SQL Server? för en grundläggande förståelse av formatsträngar och hur de hör ihop med FORMAT()
fungera.