sql >> Database teknologi >  >> RDS >> Sqlserver

Standard numeriske formatstrenge understøttet af FORMAT() i SQL Server

Denne artikel giver en reference til de standard numeriske formatspecifikationer, der kan bruges ved formatering af tal ved hjælp af FORMAT() funktion i SQL Server. Eksempler inkluderet.

Nogle af eksemplerne bruger præcisionsspecifikationer (disse består af et eller to cifre, der er tilføjet formatspecifikationen). Præcisionsspecifikationer 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 fuldstændigt.

Format streng Beskrivelse/eksempel
C eller c

Valuta . Konverterer tallet til en streng, der repræsenterer et valutabeløb.

En valgfri præcisionsangivelse kan bruges til at angive antallet af decimaler.

Eksempler (ved brug af forskellige 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 . Konverterer tallet til en streng af decimalcifre (0-9), med et minustegn foran, hvis tallet er negativt. Dette format understøttes kun for integraltyper.

Hvis den (valgfri) præcisionsspecifikation bruges, angiver den det samlede antal cifre i resultatet. Hvis nummeret ikke har så mange cifre, vil det blive udfyldt med nuller til venstre.

Eksempler :

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

Eksponentiel (videnskabelig) . Konverterer tallet til en streng af formen "-d.ddd...E+ddd" eller "-d.ddd...e+ddd", hvor hvert "d" angiver et ciffer (0-9). Strengen starter med et minustegn, hvis tallet er negativt. Præcis ét ciffer går altid foran decimaltegnet.

Hvis der bruges en præcisionsangivelse, angiver den, hvor mange cifre der er til højre for decimaltegnet. Hvis det udelades, vises seks cifre til højre for decimaltegnet.

Eksempler :

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 . Konverterer tallet til en streng af formen "-ddd.ddd...", hvor hvert "d" angiver et ciffer (0-9). Strengen starter med et minustegn, hvis tallet er negativt.

En valgfri præcisionsangivelse kan bruges til at angive antallet af decimaler.

Eksempler :

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

Generelt . Konverterer tallet til det mere kompakte af enten fikspunkts- eller videnskabelig notation, afhængigt af tallets type, og om der er en præcisionsangivelse til stede.

Hvis den (valgfri) præcisionsspecifikation bruges, definerer den det maksimale antal signifikante cifre, der kan forekomme i resultatstrengen. Hvis den udelades, eller hvis værdien er nul, bestemmes præcisionen af ​​taltypen.

Se den officielle .NET-dokumentation for en forklaring på, hvordan nummertypen kan påvirke præcisionen. Du skal muligvis krydshenvise det til den officielle dokumentation for FORMAT() for at se, hvordan hver .NET numerisk type er knyttet til en T-SQL numerisk type.

Eksempler :

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 . Konverterer tallet til en streng med formen "-d,ddd,ddd.ddd...".

Hvis den (valgfri) præcisionsspecifikation bruges, definerer den antallet af cifre til højre for decimaltegnet.

Eksempler :

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 . Multiplicer tallet med 100 og konverter det til en streng, der repræsenterer en procentdel.

Hvis præcisionsspecifikationen bruges, definerer den antallet af decimaler.

Eksempler :

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

Rundrejse . Forsøger at sikre, at en numerisk værdi, der konverteres til en streng, parses tilbage til den samme numeriske værdi.

Præcisionsspecifikationen ignoreres, når du bruger denne formatspecifikation.

BEMÆRK :I .NET understøttes denne formatspecifikation kun af Single , Dobbelt og BigInteger taltyper. Også for Dobbelt værdier, lykkes denne formatspecifikation i nogle tilfælde ikke at runde den oprindelige værdi. Det giver også dårlig ydeevne, når det bruges med Dobbelt og Single typer.

Yderligere anbefaler .NET-dokumentationen, at denne formatspecifikation bruges til BigInteger kun type. Det anbefaler, at Dobbelt typer bruger G17 og Single typer bruger G9 .

Hvad betyder det for SQL Server? Grundlæggende bør du nok undgå denne formatspecifikation i SQL Server. Brug i stedet G17 for flyderen datatype og G9 for det rigtige datatype.

Eksempler
Her er et eksempel, der sammenligner R formatspecifikation med G17 og 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 . Konverterer tallet til en streng af hexadecimale cifre.

Det anvendte tilfælde (dvs. X eller x ) angiver, om der skal bruges store eller små bogstaver til hexadecimale cifre større end 9. Dette skyldes, at en hexadecimal værdi kan bestå af følgende tegn; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e og f (begge tilfælde). Store og små bogstaver repræsenterer den samme værdi, når der bruges hexadecimal (f.eks. f og F begge konverteres til 15 i decimal).

Denne formatspecifikation understøttes kun for integraltyper.

Hvis den (valgfri) præcisionsspecifikation bruges, angiver den det samlede antal cifre i resultatet. Hvis nummeret ikke har så mange cifre, vil det blive udfyldt med nuller til venstre.

Eksempler :

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 |
+------+------+--------+--------+--------+----------+------+

Ovenstående liste er en komplet liste over gyldige strenge i .NET brugerdefineret numerisk format, baseret på oplysningerne fra den officielle .NET-dokumentation for Standard Numeric Format Strings på Microsofts websted i skrivende stund.

Grunden til at disse er relevante for SQL Server FORMAT() funktion er, at denne funktion kun accepterer gyldige .NET Framework-formatstrenge.

Ud over ovenstående standard formatstrenge, kan du også bruge tilpasset formatere strenge. Her er en komplet liste over tilpassede numeriske formatstrenge, som du kan bruge med SQL Server.

Du kan også formatere dato- og tidsværdier. Se listen over standarddato- og tidsformatstrenge samt de tilpassede dato- og tidsformatstrenge, som du kan bruge med FORMAT() funktion.

Hvis du stadig prøver at forstå, hvad en formatstreng overhovedet er, kan du se Hvad er en formatstreng i SQL Server? for en grundlæggende forståelse af formatstrenge og hvordan de vedrører FORMAT() fungere.


  1. Ugyldigt kolonnenavn sql-fejl

  2. Postgresql 9.2 pg_dump version uoverensstemmelse

  3. MySQL fejl 1449:Brugeren angivet som definerer eksisterer ikke

  4. hvordan man finder rækkestørrelse i tabel