sql >> Databáze >  >> RDS >> Sqlserver

Standardní číselné formátovací řetězce Podporované FORMAT() v SQL Server

Tento článek poskytuje odkaz na standardní specifikátory číselného formátu, které lze použít při formátování čísel pomocí FORMAT() funkce na serveru SQL Server. Zahrnuty příklady.

Některé příklady používají specifikátory přesnosti (tyto se skládají z jedné nebo dvou číslic připojených ke specifikátoru formátu). Specifikátory přesnosti mohou mít hodnotu od 0 do 99, která určuje přesnost výsledku. Jak to funguje, závisí na použitém specifikátoru formátu. U některých specifikátorů formátu uvede celkový počet číslic ve výsledku, u jiných počet desetinných míst. V ostatních případech bude zcela ignorován.

Formátovat řetězec Popis/Příklad
C nebo c

Měna . Převede číslo na řetězec, který představuje částku v měně.

K určení počtu desetinných míst lze použít volitelný specifikátor přesnosti.

Příklady (s použitím různých kultur) :

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

Desetinné . Převede číslo na řetězec desetinných číslic (0-9) s předponou znaménkem mínus, pokud je číslo záporné. Tento formát je podporován pouze pro integrální typy.

Pokud je použit (volitelný) specifikátor přesnosti, udává celkový počet číslic ve výsledku. Pokud číslo nemá tolik číslic, bude vlevo doplněno nulami.

Příklady :

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

Exponenciální (vědecká) . Převede číslo na řetězec ve tvaru „-d.ddd…E+ddd“ nebo „-d.ddd…e+ddd“, kde každé „d“ označuje číslici (0-9). Pokud je číslo záporné, řetězec začíná znaménkem mínus. Před desetinnou čárkou vždy předchází přesně jedna číslice.

Pokud je použit specifikátor přesnosti, udává, kolik číslic je napravo od desetinné čárky. Pokud je vynechán, zobrazí se vpravo od desetinné čárky šest číslic.

Příklady :

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

Pevný bod . Převede číslo na řetězec ve tvaru „-ddd.ddd…“, kde každé „d“ označuje číslici (0-9). Pokud je číslo záporné, řetězec začíná znaménkem mínus.

K určení počtu desetinných míst lze použít volitelný specifikátor přesnosti.

Příklady :

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

Obecné . Převede číslo do kompaktnějšího zápisu s pevnou řádovou čárkou nebo vědeckého zápisu v závislosti na typu čísla a na tom, zda je přítomen přesný specifikátor.

Pokud je použit (volitelný) specifikátor přesnosti, definuje maximální počet platných číslic, které se mohou objevit ve výsledném řetězci. Pokud je vynechán nebo je-li hodnota nula, je přesnost určena typem čísla.

Vysvětlení, jak může typ čísla ovlivnit přesnost, najdete v oficiální dokumentaci .NET. Možná budete muset odkazovat na oficiální dokumentaci pro FORMAT() abyste viděli, jak se každý číselný typ .NET mapuje na číselný typ T-SQL.

Příklady :

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

Číslo . Převede číslo na řetězec ve tvaru „-d,ddd,ddd.ddd…“.

Pokud je použit (volitelný) specifikátor přesnosti, definuje počet číslic napravo od desetinné čárky.

Příklady :

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

Procento . Vynásobí číslo 100 a převede ho na řetězec, který představuje procento.

Pokud je použit specifikátor přesnosti, definuje počet desetinných míst.

Příklady :

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

Zpáteční . Pokusí se zajistit, aby číselná hodnota převedená na řetězec byla analyzována zpět na stejnou číselnou hodnotu.

Specifikátor přesnosti je při použití tohoto specifikátoru formátu ignorován.

POZNÁMKA :V .NET je tento specifikátor formátu podporován pouze u Single , Dvounásobek a BigInteger číselné typy. Také pro Double hodnoty, tento specifikátor formátu v některých případech selže při úspěšném zpětném přenosu původní hodnoty. Při použití s ​​Double také nabízí slabý výkon a Svobodný typy.

Dále dokumentace .NET doporučuje, aby se tento specifikátor formátu používal pro BigInteger pouze typ. Doporučuje se Zdvojit typy používají G17 a Svobodný typy používají G9 .

Co to znamená pro SQL Server? V zásadě byste se tomuto specifikátoru formátu na serveru SQL pravděpodobně měli vyhnout. Místo toho použijte G17 pro plovoucí datový typ a G9 pro skutečné datový typ.

Příklady
Zde je příklad, který porovnává R specifikátor formátu s G17 a 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 nebo x

Hexadecimální . Převede číslo na řetězec hexadecimálních číslic.

Použitý případ (tj. X nebo x ) určuje, zda použít velká nebo malá písmena pro hexadecimální číslice větší než 9. Je to proto, že hexadecimální hodnoty se mohou skládat z následujících znaků; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e a f (v obou případech). Velká a malá písmena představují stejnou hodnotu při použití šestnáctkové soustavy (např. f a F oba se převedou na 15 v desítkové soustavě).

Tento specifikátor formátu je podporován pouze pro integrální typy.

Pokud je použit (volitelný) specifikátor přesnosti, udává celkový počet číslic ve výsledku. Pokud číslo nemá tolik číslic, bude vlevo doplněno nulami.

Příklady :

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

Výše uvedený seznam je úplným seznamem platných řetězců vlastního číselného formátu .NET na základě informací z oficiální dokumentace .NET pro standardní řetězce číselného formátu na webu společnosti Microsoft v době psaní tohoto článku.

Důvod, proč jsou relevantní pro SQL Server FORMAT() Funkce je, že tato funkce přijímá pouze platné formátovací řetězce .NET Framework.

Kromě výše uvedeného standardu formátovat řetězce, můžete také použít vlastní formátovací řetězce. Zde je úplný seznam vlastních řetězců číselného formátu, které můžete použít se serverem SQL.

Můžete také formátovat hodnoty data a času. Podívejte se na seznam standardních řetězců formátu data a času a také vlastních řetězců formátu data a času, které můžete použít s FORMAT() funkce.

Pokud se stále snažíte pochopit, co je formátovací řetězec, přečtěte si téma Co je formátovací řetězec na serveru SQL Server? pro základní pochopení formátovacích řetězců a toho, jak se vztahují k FORMAT() funkce.


  1. Příklady FROM_UNIXTIME() – MySQL

  2. Oracle dynamic DESC a ASC v pořadí podle

  3. Jak zobrazit řádky, které nejsou přítomny v jiné tabulce v MySQL

  4. Odstraňování problémů Nelegální kombinace chyb porovnávání v mysql