sql >> Databasteknik >  >> RDS >> Sqlserver

Standardsträngar för numeriskt format som stöds av FORMAT() i SQL Server

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 FORMAT() för att se hur varje .NET-numerisk typ mappas till en T-SQL-numerisk typ.

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 G17 och Singel typer använder G9 .

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 G17 för flottan datatyp och G9 för det riktiga datatyp.

Exempel
Här är ett exempel som jämför R formatspecifikation med G17 och G9 .

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. X eller x ) anger om versaler eller gemener ska användas för hexadecimala siffror större än 9. Detta beror på att ett hexadecimalt värde kan bestå av följande tecken; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e och f (bdera fallet). Versaler och gemener representerar samma värde när du använder hexadecimal (t.ex. f och F båda konverterar till 15 i decimal).

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.


  1. pgAdmin III Varför förkortas frågeresultat?

  2. MySQL Performance Benchmarking:MySQL 5.7 vs MySQL 8.0

  3. Optimeringströsklar – gruppering och aggregering av data, del 2

  4. Beräkna löpande total / löpande balans