sql >> Database >  >> RDS >> Sqlserver

Standaard numerieke notatietekenreeksen ondersteund door FORMAT() in SQL Server

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

Sommige voorbeelden gebruiken precisiespecificaties (deze bestaan ​​uit een of twee cijfers die aan de formaatspecificatie worden toegevoegd). Precisiespecificaties kunnen een waarde van 0 tot 99 zijn, die de precisie van het resultaat specificeert. Hoe het werkt, hangt af van de formaatspecificatie die wordt gebruikt. Voor sommige formaatspecificaties specificeert het het totale aantal cijfers in het resultaat, voor andere specificeert het het aantal decimalen. In andere gevallen wordt het helemaal genegeerd.

Tekenreeks opmaken Beschrijving/voorbeeld
C of c

Valuta . Converteert het getal naar een tekenreeks die een valutabedrag vertegenwoordigt.

Een optionele precisiespecificatie kan worden gebruikt om het aantal decimalen te specificeren.

Voorbeelden (met verschillende culturen) :

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 of d

Decimaal . Converteert het getal naar een reeks decimale cijfers (0-9), voorafgegaan door een minteken als het getal negatief is. Deze indeling wordt alleen ondersteund voor integrale typen.

Als de (optionele) precisiespecificatie wordt gebruikt, specificeert deze het totale aantal cijfers in het resultaat. Als het nummer niet zoveel cijfers heeft, wordt het opgevuld met nullen aan de linkerkant.

Voorbeelden :

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 of e

Exponentieel (wetenschappelijk) . Converteert het getal naar een tekenreeks van de vorm "-d.ddd...E+ddd" of "-d.ddd...e+ddd", waarbij elke "d" een cijfer aangeeft (0-9). De string begint met een minteken als het getal negatief is. Precies één cijfer gaat altijd vooraf aan de komma.

Als een precisiespecificatie wordt gebruikt, geeft deze aan hoeveel cijfers rechts van de komma staan. Indien weggelaten, verschijnen er zes cijfers rechts van de komma.

Voorbeelden :

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 of f

Vast punt . Converteert het getal naar een tekenreeks van de vorm "-ddd.ddd..." waarbij elke "d" een cijfer aangeeft (0-9). De string begint met een minteken als het getal negatief is.

Een optionele precisiespecificatie kan worden gebruikt om het aantal decimalen te specificeren.

Voorbeelden :

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 of g

Algemeen . Converteert het getal naar de compactere of vast-komma- of wetenschappelijke notatie, afhankelijk van het type getal en of er een precisiespecificatie aanwezig is.

Als de (optionele) precisiespecificatie wordt gebruikt, definieert deze het maximale aantal significante cijfers dat in de resultaatreeks kan voorkomen. Indien weggelaten, of als de waarde nul is, wordt de precisie bepaald door het nummertype.

Zie de officiële .NET-documentatie voor een uitleg over hoe het nummertype de precisie kan beïnvloeden. Mogelijk moet u dat vergelijken met de officiële documentatie voor FORMAT() om te zien hoe elk .NET numeriek type wordt toegewezen aan een T-SQL numeriek type.

Voorbeelden :

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 of n

Nummer . Converteert het getal naar een tekenreeks van de vorm "-d,ddd,ddd.ddd...".

Als de (optionele) precisiespecificatie wordt gebruikt, definieert deze het aantal cijfers rechts van de komma.

Voorbeelden :

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 of p

Procent . Vermenigvuldigt het getal met 100 en converteert het naar een tekenreeks die een percentage vertegenwoordigt.

Als de precisiespecificatie wordt gebruikt, definieert deze het aantal decimalen.

Voorbeelden :

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 of r

Retour . Pogingen om ervoor te zorgen dat een numerieke waarde die is geconverteerd naar een tekenreeks, wordt teruggeparseerd naar dezelfde numerieke waarde.

De precisiespecificatie wordt genegeerd bij gebruik van deze formaatspecificatie.

OPMERKING :In .NET wordt deze formaatspecificatie alleen ondersteund door de Single , Dubbel , en BigInteger soorten nummers. Ook voor Dubbel waarden, slaagt deze formaatspecificatie er in sommige gevallen niet in om de oorspronkelijke waarde met succes om te keren. Het biedt ook slechte prestaties bij gebruik met de Double en Enkel soorten.

Verder beveelt de .NET-documentatie aan dat deze indelingsspecificatie wordt gebruikt voor de BigInteger alleen typen. Het beveelt aan dat Dubbel typen gebruiken G17 , en Enkel typen gebruiken G9 .

Wat betekent dit voor SQL Server? In principe moet u deze indelingsspecificatie in SQL Server waarschijnlijk vermijden. Gebruik in plaats daarvan G17 voor de vlotter gegevenstype, en G9 voor de echte gegevenstype.

Voorbeelden
Hier is een voorbeeld dat de R . vergelijkt formaatspecificatie met G17 en 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 of x

Hexadecimaal . Converteert het getal naar een reeks hexadecimale cijfers.

Het gebruikte geval (d.w.z. X of x ) geeft aan of hoofdletters of kleine letters moeten worden gebruikt voor hexadecimale cijfers groter dan 9. Dit komt omdat hexadecimale waarden uit de volgende tekens kunnen bestaan; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e en f (in beide gevallen). Hoofdletters en kleine letters vertegenwoordigen dezelfde waarde bij gebruik van hexadecimaal (bijv. f en F beide converteren naar 15 in decimalen).

Deze formaatspecificatie wordt alleen ondersteund voor integrale typen.

Als de (optionele) precisiespecificatie wordt gebruikt, specificeert deze het totale aantal cijfers in het resultaat. Als het nummer niet zoveel cijfers heeft, wordt het opgevuld met nullen aan de linkerkant.

Voorbeelden :

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

De bovenstaande lijst is een volledige lijst van geldige .NET aangepaste tekenreeksen voor numerieke formaten, gebaseerd op de informatie uit de officiële .NET-documentatie voor standaard numerieke notatiereeksen op de Microsoft-website op het moment van schrijven.

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

Naast de bovenstaande standaard tekenreeksen opmaken, kunt u ook aangepast . gebruiken tekenreeksen opmaken. Hier is een volledige lijst met aangepaste 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. Hoe Airflow te verbinden met de Oracle-database

  2. Beheerscripts in R12.2 Ebusiness Suite

  3. Hoe een externe sleutel in SQL toe te voegen?

  4. Hoe vind je alle tabellen met externe sleutels die verwijzen naar bepaalde table.column en die waarden hebben voor die externe sleutels?