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

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

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

Format streng Beskrivelse/eksempel
0

Nul pladsholder . Erstatter nullet med det tilsvarende ciffer, hvis et er til stede; ellers vises nul i resultatstrengen.

Eksempler :

SELECT 
  FORMAT(12.34, '0') R1,
  FORMAT(012.34, '00') R2,
  FORMAT(12.34, '000') R3,
  FORMAT(012.34, '0000') R4,
  FORMAT(12.54, '00') R5;
+------+------+------+------+------+
| R1   | R2   | R3   | R4   | R5   |
|------+------+------+------+------|
| 12   | 12   | 012  | 0012 | 13   |
+------+------+------+------+------+
#

Ciffer pladsholder . Erstatter "#" symbolet med det tilsvarende ciffer, hvis et er til stede; ellers vises der intet ciffer i resultatstrengen.

Der vises intet ciffer i resultatstrengen, hvis det tilsvarende ciffer i inputstrengen er et ikke-signifikant 0.

Eksempler :

SELECT 
  FORMAT(12.34, '#') R1,
  FORMAT(012.34, '##') R2,
  FORMAT(12.34, '###') R3,
  FORMAT(012.34, '####') R4,
  FORMAT(12.54, '##') R5;
+------+------+------+------+------+
| R1   | R2   | R3   | R4   | R5   |
|------+------+------+------+------|
| 12   | 12   | 12   | 12   | 13   |
+------+------+------+------+------+
.

Decimaltegn . Bestemmer placeringen af ​​decimalseparatoren i resultatstrengen.

Eksempler :

SELECT 
  FORMAT(12.34, '0.0', 'en-US') R1,
  FORMAT(12.34, '.00', 'en-US') R2,
  FORMAT(12.34, '.', 'en-US') R3,
  FORMAT(12.34, '.00', 'fr-FR') R4;
+------+-------+------+-------+
| R1   | R2    | R3   | R4    |
|------+-------+------+-------|
| 12.3 | 12.34 | 12   | 12,34 |
+------+-------+------+-------+
,

Gruppeseparator og talskalering . Kan bruges som både en gruppeseparator (også kendt som tusindseparator) og en talskaleringsspecifikator.

  • Som en gruppeseparator , indsætter den et lokaliseret gruppeseparatortegn mellem hver gruppe.
  • Som en angivelse af talskalering , dividerer det et tal med 1000 for hvert angivet komma.

For at angive en gruppeseparator skal du placere et eller flere kommaer mellem tocifrede pladsholdere (0 eller #), der formaterer et tals integralcifre. Dette resulterer i, at der indsættes et gruppeseparatortegn mellem hver talgruppe i den integrerede del af outputtet.

For at angive en talskaleringsangivelse skal du placere et eller flere kommaer umiddelbart til venstre for det eksplicitte eller implicitte decimaltegn.

Eksempler – Som gruppeseparator :

SELECT 
  FORMAT(12345678, '#,#', 'en-US') 'US English',
  FORMAT(12345678, '#,#', 'fr-FR') 'French',
  FORMAT(12345678, '#,#', 'es-ES') 'Spanish';
+--------------+------------+------------+
| US English   | French     | Spanish    |
|--------------+------------+------------|
| 12,345,678   | 12 345 678 | 12.345.678 |
+--------------+------------+------------+

Eksempler – som en talskaleringsspecifikator :

SELECT 
  FORMAT(12000, '#,', 'en-US') 'R1',
  FORMAT(1234567890, '#,', 'en-US') R2,
  FORMAT(1234567890, '#,,', 'en-US') R3;
+------+---------+------+
| R1   | R2      | R3   |
|------+---------+------|
| 12   | 1234568 | 1235 |
+------+---------+------+

Eksempler – som begge :

SELECT 
  FORMAT(1234567890, '#,#,', 'en-US') R1,
  FORMAT(1234567890, '#,#,,', 'en-US') R2;
+-----------+-------+
| R1        | R2    |
|-----------+-------|
| 1,234,568 | 1,235 |
+-----------+-------+
%

Pladsholder i procent . Multiplicerer et tal med 100 og indsætter et lokaliseret procentsymbol i resultatstrengen.

Eksempler :

SELECT 
  FORMAT(0.1234, '#.# %', 'en-US') R1,
  FORMAT(0.1235, '#.#%', 'zh-cn') R2,
  FORMAT(0.125, '#. %', 'en-US') R3,
  FORMAT(0.1234, '%#.00,', 'tr') R4,
  FORMAT(0.1234, '#.#%', 'it') R5;
+--------+-------+------+--------+-------+
| R1     | R2    | R3   | R4     | R5    |
|--------+-------+------+--------+-------|
| 12.3 % | 12.4% | 13 % | %12,34 | 12,3% |
+--------+-------+------+--------+-------+

Promille pladsholder . Multiplicerer et tal med 1000 og indsætter et lokaliseret promille-symbol i resultatstrengen.

Eksempler :

SELECT 
  FORMAT(0.01234, '#.# ‰', 'en-US') 'R1',
  FORMAT(0.01235, '#.# ‰', 'en-US') R2,
  FORMAT(0.0125, '#. ‰', 'en-US') R3,
  FORMAT(0.01234, '#.# ‰', 'fr-FR') R4;
+--------+--------+------+--------+
| R1     | R2     | R3   | R4     |
|--------+--------+------+--------|
| 12.3 ‰ | 12.4 ‰ | 13 ‰ | 12,3 ‰ |
+--------+--------+------+--------+

E0
E+0
E-0
e0
e+0
e-0

Eksponentiel notation . Hvis efterfulgt af mindst ét ​​nul (0 ), formaterer resultatet ved hjælp af eksponentiel notation. Sagen (E eller e ) angiver store og små bogstaver for eksponentsymbolet i resultatstrengen. Antallet af nuller efter E eller e karakter bestemmer minimumsantallet af cifre i eksponenten. Et plustegn (+ ) angiver, at et tegn altid går forud for eksponenten. Et minustegn (- ) angiver, at et tegn kun går forud for negative eksponenter.

Eksempler :

SELECT 
  FORMAT(123456789, '0e0') R1,
  FORMAT(123456789, '0e+0') R2,
  FORMAT(123456789, '0E+00') R3,
  FORMAT(1234.56789, '0.0##e+00') R4,
  FORMAT(12.3456789-12, '0e-0') R5;
+------+------+-------+-----------+------+
| R1   | R2   | R3    | R4        | R5   |
|------+------+-------+-----------+------|
| 1e8  | 1e+8 | 1E+08 | 1.235e+03 | 3e-1 |
+------+------+-------+-----------+------+

\

Escape-karakter . Får det næste tegn til at blive fortolket som en bogstavelig snarere end som en brugerdefineret formatangivelse.

Eksempel :

SELECT FORMAT(123, '\#0000') Result;
+----------+
| Result   |
|----------|
| #0123    |
+----------+

'string'
"string"

Literal streng-adskiller . Angiver, at de vedlagte tegn skal kopieres til resultatstrengen uændret.

Eksempel :

SELECT FORMAT(23, '## Degrees') Result;
+------------+
| Result     |
|------------|
| 23 Degrees |
+------------+

;

Sektionsseparator . Dette er en betinget formatangivelse, der definerer sektioner med separate formatstrenge for positive, negative og nultal. Dette giver dig mulighed for at anvende forskellig formatering på et tal, afhængigt af om dets værdi er positiv, negativ eller nul. En streng med tilpasset format kan indeholde op til tre sektioner adskilt af semikolon.

  • Én sektion :Formatstrengen gælder for alle værdier (ligesom i de foregående eksempler).
  • To sektioner :Det første afsnit gælder for positive værdier og nuller, og det andet afsnit gælder for negative værdier.

    Hvis det tal, der skal formateres, er negativt, men bliver nul efter afrunding i henhold til formatet i den anden sektion, formateres det resulterende nul i overensstemmelse med den første sektion.

  • Tre sektioner :Det første afsnit gælder for positive værdier, det andet afsnit gælder for negative værdier, og det tredje afsnit gælder for nuller.

    Den anden sektion kan efterlades tom (ved at der ikke er noget mellem semikolonerne), i hvilket tilfælde den første sektion gælder for alle værdier, der ikke er nul.

    Hvis det tal, der skal formateres, ikke er nul, men bliver nul efter afrunding i henhold til formatet i den første eller anden sektion, formateres det resulterende nul i overensstemmelse med den tredje sektion.

Bemærk, at negative værdier altid vises uden et minustegn, når der bruges sektionsadskillere. Hvis du ønsker, at den endelige formaterede værdi skal have et minustegn, skal du udtrykkeligt inkludere minustegnet som en del af den tilpassede formatstreng. Dette gælder også for enhver anden allerede eksisterende formatering forbundet med et nummer.

Eksempel – Én sektion (ingen sektionsseparatorer)
Dette er en typisk formatstreng, der består af én sektion (ligesom i de foregående eksempler). Derfor bruges der ingen separatorer.

SELECT 
  FORMAT(123, '0 (Number)') Positive,
  FORMAT(-123, '0 (Number)') Negative,
  FORMAT(0, '0 (Number)') Zero;
+--------------+---------------+------------+
| Positive     | Negative      | Zero       |
|--------------+---------------+------------|
| 123 (Number) | -123 (Number) | 0 (Number) |
+--------------+---------------+------------+

Bemærk, at minustegnet forbliver intakt, fordi jeg ikke brugte nogen sektionsseparatorer.

Eksempler – to sektioner :

/* EXAMPLE 1 - Same format string, different values */
SELECT 
  FORMAT(123,  '0 (Positive or Zero); 0 (Negative)') Positive,
  FORMAT(-123, '0 (Positive or Zero); 0 (Negative)') Negative,
  FORMAT(0,    '0 (Positive or Zero); 0 (Negative)') Zero;
+------------------------+-----------------+----------------------+
| Positive               | Negative        | Zero                 |
|------------------------+-----------------+----------------------|
| 123 (Positive or Zero) |  123 (Negative) | 0 (Positive or Zero) |
+------------------------+-----------------+----------------------+

/* EXAMPLE 2 - Rounding. 
Negative values rounded to zero get 
formatted under the first format string. 
*/
SELECT 
  FORMAT(0.1,  '0 (Positive or Zero); 0 (Negative)') Positive,
  FORMAT(-0.1, '0 (Positive or Zero); 0 (Negative)') Negative;
+----------------------+----------------------+
| Positive             | Negative             |
|----------------------+----------------------|
| 0 (Positive or Zero) | 0 (Positive or Zero) |
+----------------------+----------------------+

Eksempler – tre sektioner :

/* EXAMPLE 1 - Basic Usage */
SELECT FORMAT(123, '0 (Positive); 0 (Negative); 0 (Zero)') Result;
+----------------+
| Result         |
|----------------|
| 123 (Positive) |
+----------------+

/* EXAMPLE 2 - Same format string, different values */
SELECT 
  FORMAT(123,   '0 (Positive); 0 (Negative); 0 (Zero)') 'Positive',
  FORMAT(-123,  '0 (Positive); 0 (Negative); 0 (Zero)') 'Negative',
  FORMAT(0,     '0 (Positive); 0 (Negative); 0 (Zero)') 'Zero',
  FORMAT(0.123, '0 (Positive); 0 (Negative); 0 (Zero)') 'Rounded to Zero';

+----------------+----------------+-----------+-------------------+
| Positive       | Negative       | Zero      | Rounded to Zero   |
|----------------+----------------+-----------+-------------------|
| 123 (Positive) | 123 (Negative) |  0 (Zero) |  0 (Zero)         |
+----------------+----------------+-----------+-------------------+

/* EXAMPLE 3 - Second format string is empty */
SELECT 
  FORMAT(123,   '0 (Positive);; 0 (Zero)') 'Positive',
  FORMAT(-123,  '0 (Positive);; 0 (Zero)') 'Negative',
  FORMAT(0,     '0 (Positive);; 0 (Zero)') 'Zero',
  FORMAT(0.123, '0 (Positive);; 0 (Zero)') 'Rounded to Zero';
+----------------+-----------------+-----------+-------------------+
| Positive       | Negative        | Zero      | Rounded to Zero   |
|----------------+-----------------+-----------+-------------------|
| 123 (Positive) | -123 (Positive) |  0 (Zero) |  0 (Zero)         |
+----------------+-----------------+-----------+-------------------+
Andet

Alle andre tegn. Tegnet kopieres til resultatstrengen uændret.

Eksempel :

SELECT FORMAT(12, '# °C') Result;
+----------+
| Result   |
|----------|
| 12 °C    |
+----------+

Ovenstående liste er en komplet liste over gyldige strenge i .NET-tilpasset format, baseret på oplysningerne fra den officielle .NET-dokumentation for tilpassede formatstrenge på Microsofts websted i skrivende stund.

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

Ud over ovenstående tilpassede formatstrenge, kan du også bruge standard formatere strenge. Her er en komplet liste over Standard Numeric Format Strings, 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. Sortering af nulværdier efter alle andre, undtagen specielle

  2. Sådan får du maks. værdi af kolonnetype heltal gemt som typetekst i SQLite-tabel

  3. Sådan listes alle standardbegrænsninger med kolonner i SQL Server-databasen - SQL Server / TSQL selvstudium, del 92

  4. Databaseserverhardwaretendenser