Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Standardowe ciągi formatu liczbowego obsługiwane przez FORMAT() w SQL Server

Ten artykuł zawiera odniesienie do standardowych specyfikatorów formatu liczb, których można używać podczas formatowania liczb za pomocą FORMAT() funkcja w SQL Server. Dołączone przykłady.

Niektóre przykłady używają specyfikatorów dokładności (składają się one z jednej lub dwóch cyfr dołączonych do specyfikatora formatu). Specyfikatory precyzji mogą mieć wartość od 0 do 99, która określa precyzję wyniku. Sposób działania zależy od używanego specyfikatora formatu. Dla niektórych specyfikatorów formatu określi całkowitą liczbę cyfr w wyniku, dla innych określi liczbę miejsc dziesiętnych. W innych przypadkach zostanie całkowicie zignorowany.

ciąg formatu Opis/przykład
C lub c

Waluta . Konwertuje liczbę na ciąg reprezentujący kwotę w walucie.

Do określenia liczby miejsc dziesiętnych można użyć opcjonalnego specyfikatora dokładności.

Przykłady (przy użyciu różnych 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 lub d

Dziesiętny . Konwertuje liczbę na ciąg cyfr dziesiętnych (0-9), poprzedzony znakiem minus, jeśli liczba jest ujemna. Ten format jest obsługiwany tylko dla typów całkowitych.

Jeśli używany jest (opcjonalny) specyfikator dokładności, określa on całkowitą liczbę cyfr w wyniku. Jeśli liczba nie ma tylu cyfr, zostanie uzupełniona zerami po lewej stronie.

Przykłady :

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

Wykładniczy (naukowy) . Konwertuje liczbę na ciąg w postaci „-d.ddd…E+ddd” lub „-d.ddd…e+ddd”, gdzie każdy „d” oznacza cyfrę (0-9). Ciąg zaczyna się od znaku minus, jeśli liczba jest ujemna. Dokładnie jedna cyfra zawsze poprzedza przecinek dziesiętny.

Jeśli używany jest specyfikator dokładności, określa on, ile cyfr znajduje się po prawej stronie przecinka dziesiętnego. Jeśli zostanie pominięty, sześć cyfr pojawi się po prawej stronie przecinka.

Przykłady :

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

Stały punkt . Konwertuje liczbę na ciąg w postaci „-ddd.ddd…”, gdzie każde „d” oznacza cyfrę (0-9). Łańcuch zaczyna się od znaku minus, jeśli liczba jest ujemna.

Do określenia liczby miejsc dziesiętnych można użyć opcjonalnego specyfikatora dokładności.

Przykłady :

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

Ogólne . Konwertuje liczbę na bardziej zwartą notację stałoprzecinkową lub naukową, w zależności od typu liczby i obecności specyfikatora precyzji.

Jeśli używany jest specyfikator dokładności (opcjonalny), definiuje on maksymalną liczbę cyfr znaczących, które mogą pojawić się w ciągu wynikowym. W przypadku pominięcia lub jeśli wartość wynosi zero, dokładność jest określana przez typ liczby.

Zobacz oficjalną dokumentację platformy .NET, aby uzyskać wyjaśnienie, w jaki sposób typ liczby może wpływać na precyzję. Być może trzeba będzie odnieść się do tego z oficjalną dokumentacją dla FORMAT() aby zobaczyć, jak każdy typ numeryczny .NET mapuje się na typ numeryczny T-SQL.

Przykłady :

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

Numer . Konwertuje liczbę na ciąg w postaci „-d,ddd,ddd.ddd…”.

Jeśli używany jest (opcjonalny) specyfikator dokładności, określa on liczbę cyfr po prawej stronie przecinka dziesiętnego.

Przykłady :

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

Procent . Mnoży liczbę przez 100 i konwertuje ją na ciąg, który reprezentuje wartość procentową.

Jeśli używany jest specyfikator precyzji, określa on liczbę miejsc dziesiętnych.

Przykłady :

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

Podróż w obie strony . Próbuje zapewnić, że wartość liczbowa, która zostanie przekonwertowana na ciąg, zostanie przetworzona z powrotem na tę samą wartość liczbową.

Specyfikator dokładności jest ignorowany podczas używania tego specyfikatora formatu.

UWAGA :w .NET ten specyfikator formatu jest obsługiwany tylko przez Pojedynczy , Podwójny i BigInteger typy liczb. Również dla Podwójnego wartości, ten specyfikator formatu w niektórych przypadkach nie może pomyślnie zawrócić oryginalnej wartości. Oferuje również słabą wydajność, gdy jest używany z Double i Pojedynczy typy.

Ponadto dokumentacja .NET zaleca, aby ten specyfikator formatu był używany dla BigInteger tylko wpisz. Zaleca Podwójne typy używają G17 i Pojedynczy typy używają G9 .

Co to oznacza dla SQL Server? Zasadniczo powinieneś prawdopodobnie unikać tego specyfikatora formatu w SQL Server. Zamiast tego użyj G17 dla pływaka typ danych i G9 dla prawdziwego typ danych.

Przykłady
Oto przykład porównujący R specyfikator formatu z G17 i 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 lub x

szesnastkowy . Konwertuje liczbę na ciąg cyfr szesnastkowych.

Użyty przypadek (np. X lub x ) określa, czy w przypadku cyfr szesnastkowych większych od 9 należy używać wielkich czy małych liter. Dzieje się tak, ponieważ wartości szesnastkowe mogą składać się z następujących znaków; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e i f (w obu przypadkach). Wielkie i małe litery reprezentują tę samą wartość, gdy używane są szesnastkowe (np. f i F oba konwertują do 15 w postaci dziesiętnej).

Ten specyfikator formatu jest obsługiwany tylko dla typów całkowitych.

Jeśli używany jest (opcjonalny) specyfikator dokładności, określa on całkowitą liczbę cyfr w wyniku. Jeśli liczba nie ma tylu cyfr, zostanie uzupełniona zerami po lewej stronie.

Przykłady :

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

Powyższa lista jest pełną listą prawidłowych ciągów formatu .NET w niestandardowym formacie liczbowym, opartą na informacjach z oficjalnej dokumentacji .NET dla ciągów formatu standardowego numerycznego w witrynie Microsoft w momencie pisania tego tekstu.

Powód, dla którego są one istotne dla SQL Server FORMAT() funkcja polega na tym, że ta funkcja akceptuje tylko prawidłowe ciągi formatu .NET Framework.

Oprócz powyższego standardu ciągi formatu, możesz także użyć niestandardowego ciągi formatu. Oto pełna lista niestandardowych ciągów formatu liczb, których można używać z SQL Server.

Możesz także sformatować wartości daty i godziny. Zobacz listę ciągów standardowego formatu daty i godziny, a także ciągów niestandardowego formatu daty i godziny, których można używać z FORMAT() funkcja.

Jeśli nadal próbujesz zrozumieć, czym jest ciąg formatu, zobacz Co to jest ciąg formatu w programie SQL Server? dla podstawowego zrozumienia ciągów formatujących i ich związku z FORMAT() funkcjonować.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje program SQL Server Profiler dla programu SQL Server Express?

  2. Jaka jest różnica między użyciem sprzężenia krzyżowego a umieszczeniem przecinka między dwiema tabelami?

  3. Jak utworzyć niezerowe ograniczenie w kolumnie w tabeli SQL Server — samouczek SQL Server / T-SQL, część 51

  4. Co to jest operator logiczny IN w SQL Server — samouczek SQL Server / TSQL część 122

  5. Jak mogę uzyskać sumę wielu wartości daty i godziny?