sql >> Databasteknik >  >> RDS >> Sqlserver

Anpassade numeriska formatsträngar som stöds av FORMAT() i SQL Server

Den här artikeln ger en referens till de anpassade numeriska formatspecifikationerna som kan användas när du formaterar tal med FORMAT() funktion i SQL Server. Exempel ingår.

Formatera sträng Beskrivning/exempel
0

Noll platshållare . Ersätter nollan med motsvarande siffra om en sådan finns; annars visas noll i resultatsträngen.

Exempel :

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

Sifferplatshållare . Ersätter symbolen "#" med motsvarande siffra om en sådan finns; annars visas ingen siffra i resultatsträngen.

Ingen siffra visas i resultatsträngen om motsvarande siffra i inmatningssträngen är en icke-signifikant 0.

Exempel :

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

Decimalkomma . Bestämmer platsen för decimalavgränsaren i resultatsträngen.

Exempel :

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

Gruppseparator och nummerskalning . Kan användas både som en gruppseparator (även känd som tusenseparator) och en nummerskalningsspecifikator.

  • Som en gruppseparator , infogar den ett lokaliserat gruppseparatortecken mellan varje grupp.
  • Som en nummerskalningsspecifikator , dividerar den ett tal med 1000 för varje kommatecken som anges.

För att ange en gruppavgränsare, placera ett eller flera kommatecken mellan tvåsiffriga platshållare (0 eller #) som formaterar de integrerade siffrorna i ett tal. Detta resulterar i att ett gruppseparatortecken infogas mellan varje nummergrupp i den integrerade delen av utdata.

För att ange en nummerskalningsspecifikator, placera ett eller flera kommatecken omedelbart till vänster om den explicita eller implicita decimalkomman.

Exempel – Som gruppseparator :

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

Exempel – Som en nummerskalningsspecifikator :

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

Exempel – som båda :

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

Procentuell platshållare . Multiplicerar ett tal med 100 och infogar en lokaliserad procentsymbol i resultatsträngen.

Exempel :

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 platshållare . Multiplicerar ett tal med 1000 och infogar en lokaliserad promille-symbol i resultatsträngen.

Exempel :

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

Exponentiell notation . Om den följs av minst en nolla (0 ), formaterar resultatet med exponentiell notation. Fallet (E eller e ) indikerar fallet med exponentsymbolen i resultatsträngen. Antalet nollor efter E eller e tecken bestämmer det minsta antalet siffror i exponenten. Ett plustecken (+ ) indikerar att ett tecken alltid föregår exponenten. Ett minustecken (- ) indikerar att ett tecken endast föregår negativa exponenter.

Exempel :

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-tecken . Gör att nästa tecken tolkas som en bokstavlig snarare än som en anpassad formatspecifikator.

Exempel :

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

'string'
"string"

Literal strängavgränsare . Indikerar att de bifogade tecknen ska kopieras till resultatsträngen oförändrad.

Exempel :

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

;

Sektionsavgränsare . Detta är en villkorsformatspecifikation som definierar avsnitt med separata formatsträngar för positiva, negativa och nolltal. Detta gör att du kan tillämpa olika formatering på ett tal beroende på om dess värde är positivt, negativt eller noll. En anpassad formatsträng kan innehålla upp till tre sektioner separerade med semikolon.

  • Ett avsnitt :Formatsträngen gäller för alla värden (precis som i de tidigare exemplen).
  • Två avsnitt :Det första avsnittet gäller positiva värden och nollor, och det andra avsnittet gäller negativa värden.

    Om talet som ska formateras är negativt, men blir noll efter avrundning enligt formatet i den andra delen, formateras den resulterande nollan enligt den första delen.

  • Tre avsnitt :Det första avsnittet gäller positiva värden, det andra avsnittet gäller negativa värden och det tredje avsnittet gäller nollor.

    Den andra sektionen kan lämnas tom (genom att inte ha något mellan semikolon), i vilket fall den första sektionen gäller för alla värden som inte är noll.

    Om talet som ska formateras inte är noll, men blir noll efter avrundning enligt formatet i den första eller andra delen, formateras den resulterande nollan enligt den tredje delen.

Observera att negativa värden alltid visas utan minustecken när sektionsavgränsare används. Om du vill att det slutliga formaterade värdet ska ha ett minustecken, måste du uttryckligen inkludera minustecknet som en del av den anpassade formatsträngen. Detta gäller även för all annan befintlig formatering som är kopplad till ett nummer.

Exempel – en sektion (inga sektionsavgränsare)
Detta är en typisk formatsträng som består av en sektion (precis som i de tidigare exemplen). Därför används inga 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) |
+--------------+---------------+------------+

Observera att minustecknet förblir intakt, eftersom jag inte använde några avsnittsavgränsare.

Exempel – två 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) |
+----------------------+----------------------+

Exempel – tre avsnitt :

/* 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)         |
+----------------+-----------------+-----------+-------------------+
Övrigt

Alla andra karaktärer. Tecknet kopieras till resultatsträngen oförändrad.

Exempel :

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

Listan ovan är en komplett lista över giltiga strängar för anpassat .NET-format, baserad på informationen från den officiella .NET-dokumentationen för anpassade formatsträngar på Microsofts webbplats i skrivande stund.

Anledningen till att dessa är relevanta för SQL Server FORMAT() Funktionen är att den endast accepterar giltiga .NET Framework-formatsträngar.

Förutom ovanstående anpassade formatsträngar kan du också använda standard formatera strängar. Här är en fullständig lista över standardsträngar för numeriskt format 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. Psql lista alla tabeller

  2. Hitta sekvensluckor i en tabell i Oracle

  3. SQL Server Escape ett understreck

  4. VÄLJ eller INFOGA en rad i ett kommando