sql >> Database >  >> RDS >> Sqlserver

Aangepaste numerieke notatietekenreeksen ondersteund door FORMAT() in SQL Server

Dit artikel bevat een referentie voor de aangepaste numerieke notatiespecificaties die kunnen worden gebruikt bij het opmaken van getallen met behulp van de FORMAT() functie in SQL Server. Voorbeelden inbegrepen.

Tekenreeks opmaken Beschrijving/voorbeeld
0

Nul tijdelijke aanduiding . Vervangt de nul door het corresponderende cijfer als er een aanwezig is; anders verschijnt nul in de resultaatreeks.

Voorbeelden :

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

Cijferplaatsaanduiding . Vervangt het symbool "#" door het corresponderende cijfer, indien aanwezig; anders verschijnt er geen cijfer in de resultaatreeks.

Er verschijnt geen cijfer in de resultaatreeks als het corresponderende cijfer in de invoerreeks een niet-significante 0 is.

Voorbeelden :

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

Decimaal punt . Bepaalt de locatie van het decimaalteken in de resultaatreeks.

Voorbeelden :

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

Groepsscheidingsteken en getalschaling . Kan worden gebruikt als zowel een groepsscheidingsteken (ook bekend als duizendscheidingsteken) en een getalschaalspecificatie.

  • Als een groepsscheidingsteken , het voegt een gelokaliseerd groepsscheidingsteken in tussen elke groep.
  • Als een getalschaalspecificatie , het deelt een getal door 1000 voor elke opgegeven komma.

Om een ​​groepsscheidingsteken op te geven, plaatst u een of meer komma's tussen twee tijdelijke aanduidingen voor cijfers (0 of #) die de integrale cijfers van een getal opmaken. Dit resulteert in het invoegen van een groepsscheidingsteken tussen elke cijfergroep in het integrale deel van de uitvoer.

Om een ​​getalschaalspecificatie op te geven, plaatst u een of meer komma's onmiddellijk links van de expliciete of impliciete decimale punt.

Voorbeelden – als groepsscheider :

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

Voorbeelden – als specificatie voor nummerschaal :

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

Voorbeelden – als beide :

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

Percentage tijdelijke aanduiding . Vermenigvuldigt een getal met 100 en voegt een gelokaliseerd percentagesymbool in de resultaatreeks in.

Voorbeelden :

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

Per mille placeholder . Vermenigvuldigt een getal met 1000 en voegt een gelokaliseerd promille-symbool in de resultaatreeks in.

Voorbeelden :

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

Exponentiële notatie . Indien gevolgd door ten minste één nul (0 ), maakt het resultaat op met behulp van exponentiële notatie. De zaak (E of e ) geeft het geval aan van het exponentsymbool in de resultaatreeks. Het aantal nullen na de E of e karakter bepaalt het minimum aantal cijfers in de exponent. Een plusteken (+ ) geeft aan dat een teken altijd voorafgaat aan de exponent. Een minteken (- ) geeft aan dat een teken voorafgaat aan alleen negatieve exponenten.

Voorbeelden :

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-personage . Zorgt ervoor dat het volgende teken wordt geïnterpreteerd als een letterlijke in plaats van als een aangepaste indelingsspecificatie.

Voorbeeld :

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

'string'
"string"

Letterlijk tekenreeksscheidingsteken . Geeft aan dat de ingesloten tekens ongewijzigd naar de resultaatreeks moeten worden gekopieerd.

Voorbeeld :

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

;

Sectiescheidingsteken . Dit is een voorwaardelijke opmaakspecificatie die secties definieert met aparte opmaakreeksen voor positieve, negatieve en nulgetallen. Hierdoor kunt u verschillende opmaak toepassen op een getal, afhankelijk van of de waarde positief, negatief of nul is. Een tekenreeks met aangepaste opmaak kan maximaal drie secties bevatten, gescheiden door puntkomma's.

  • Eén sectie :De opmaakreeks is van toepassing op alle waarden (net als in de vorige voorbeelden).
  • Twee secties :De eerste sectie is van toepassing op positieve waarden en nullen, en de tweede sectie is van toepassing op negatieve waarden.

    Als het op te maken getal negatief is, maar nul wordt na afronding volgens het formaat in de tweede sectie, wordt de resulterende nul opgemaakt volgens de eerste sectie.

  • Drie secties :De eerste sectie is van toepassing op positieve waarden, de tweede sectie is van toepassing op negatieve waarden en de derde sectie is van toepassing op nullen.

    De tweede sectie kan leeg worden gelaten (door niets tussen de puntkomma's te plaatsen), in welk geval de eerste sectie van toepassing is op alle waarden die niet nul zijn.

    Als het op te maken getal niet-nul is, maar nul wordt na afronding volgens het formaat in de eerste of tweede sectie, wordt de resulterende nul opgemaakt volgens de derde sectie.

Houd er rekening mee dat negatieve waarden altijd zonder minteken worden weergegeven wanneer sectiescheidingstekens worden gebruikt. Als u wilt dat de uiteindelijke opgemaakte waarde een minteken heeft, moet u het minteken expliciet opnemen als onderdeel van de tekenreeks voor aangepaste opmaak. Dit geldt ook voor alle andere reeds bestaande opmaak die aan een getal is gekoppeld.

Voorbeeld – één sectie (geen sectiescheidingstekens)
Dit is een typische tekenreeks die uit één sectie bestaat (net als in de vorige voorbeelden). Daarom worden er geen scheidingsscheiders gebruikt.

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

Merk op dat het minteken intact blijft, omdat ik geen sectiescheidingstekens heb gebruikt.

Voorbeelden – Twee secties :

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

Voorbeelden – Drie secties :

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

Alle andere tekens. Het teken wordt ongewijzigd naar de resultaatreeks gekopieerd.

Voorbeeld :

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

De bovenstaande lijst is een volledige lijst met geldige .NET-strings voor aangepaste indeling, gebaseerd op de informatie uit de officiële .NET-documentatie voor Custom Format Strings op de Microsoft-website op het moment van schrijven.

De reden waarom deze relevant zijn voor de SQL Server FORMAT() functie is dat het alleen geldige tekenreeksen in .NET Framework-indeling accepteert.

Naast de bovenstaande aangepaste format strings, u kunt ook standaard . gebruiken tekenreeksen opmaken. Hier is een volledige lijst met standaard numerieke notatiereeksen die u met SQL Server kunt gebruiken.

U kunt ook datum- en tijdwaarden opmaken. Bekijk de lijst met standaard tekenreeksen voor datum- en tijdnotatie en de aangepaste tekenreeksen voor datum- en tijdnotatie die u kunt gebruiken met de FORMAT() functie.

Als u nog steeds probeert te begrijpen wat een indelingsreeks is, raadpleegt u Wat is een indelingsreeks in SQL Server? voor een basisbegrip van opmaakstrings en hoe ze betrekking hebben op de FORMAT() functie.


  1. Wijzigen hoe isql SQL uitvoert

  2. Hoe BIN() werkt in MariaDB

  3. Een sha1-hash van een rij maken in Oracle

  4. Een benadering van indexafstemming - Deel 1