Począwszy od SQL Server 2012, możesz formatować typy liczbowe za pomocą T-SQL FORMAT()
funkcjonować. Ta funkcja przyjmuje trzy argumenty; liczbę, format i opcjonalny argument „kultura”.
Zwraca sformatowany ciąg typu nvarchar .
Format jest dostarczany jako ciąg formatu. Ciąg formatu określa, jak dane wyjściowe powinny być sformatowane.
Oto przykład:
SELECT FORMAT(1, 'N');
Wynik:
1.00
W tym przypadku użyłem N
jako drugi argument. Jest to standardowy specyfikator formatu liczb dla Number. Ten konkretny specyfikator formatu (N
) powoduje, że dane wyjściowe są formatowane za pomocą cyfr całkowitych i dziesiętnych, separatorów grup oraz separatora dziesiętnego z opcjonalnym znakiem ujemnym. W tym argumencie nie jest rozróżniana wielkość liter, więc albo N
lub n
jest w porządku.
Miejsca dziesiętne
Oto kolejny przykład, tym razem przy użyciu N1
aby określić, że chcemy tylko jednego miejsca dziesiętnego:
SELECT FORMAT(1, 'N1');
Wynik:
1.0
Ale możesz też zwiększyć liczbę miejsc po przecinku:
SELECT FORMAT(1, 'N7');
Wynik:
1.0000000
W tych przykładach 1
i 7
są znane jako specyfikatory precyzji .
Specyfikatory dokładności są opcjonalne. Mogą być wartością 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. Zobacz pełną listę specyfikatorów standardowego formatu liczb, aby zobaczyć, jak specyfikatory precyzji wpływają na dane wyjściowe każdego specyfikatora formatu.
Procent
Poniższe przykłady używają P
argument, który formatuje liczbę jako wartość procentową. Mnoży liczbę przez 100, a następnie dodaje zlokalizowany znak procentu.
SELECT FORMAT(1, 'P') AS 'Example 1', FORMAT(.375, 'P') AS 'Example 2', FORMAT(.0375, 'P', 'tr-tr') AS 'Example 3';
Wynik:
Example 1 Example 2 Example 3 --------- --------- --------- 100.00 % 37.50 % %3,75
Zauważ, że "Przykład 3" zawiera trzeci argument, który określa kulturę, która ma być używana w danych wyjściowych. W tym przypadku używam tr-tr
dla języka tureckiego. Powoduje to dodanie znaku procentu do liczby (zamiast dołączania, jak inne). Powoduje to również użycie przecinka jako separatora dziesiętnego.
Jeśli nie podasz argumentu „kultura”, używany jest język bieżącej sesji.
Jak możesz sobie wyobrazić, możesz uzyskać całkiem różne wyniki w zależności od twojego języka lub wartości jakiegokolwiek argumentu „kulturowego”. Zobacz, jak ustawienia języka mogą wpłynąć na wyniki FORMAT(), aby uzyskać więcej przykładów.
Waluta
Możesz użyć C
aby zwrócić wartość waluty.
SELECT FORMAT(1, 'C');
Wynik:
$1.00
Możesz również dodać ustawienia regionalne jako trzeci parametr.
Oto kilka przykładów:
SELECT FORMAT(1, 'C', 'fr-FR') AS France, FORMAT(1, 'C', 'th-TH') AS Thailand, FORMAT(1, 'C', 'ja-JP') AS Japan;
Wynik:
France Thailand Japan ------ -------- ----- 1,00 € ฿1.00 ¥1
Wykładniczy (naukowy)
Możesz użyć E
aby określić notację wykładniczą.
SELECT FORMAT(1234.56789, 'E');
Wynik:
1.234568E+003
szesnastkowy
Możesz nawet sformatować liczbę jako szesnastkową. Aby to zrobić, użyj X
argument:
SELECT FORMAT(10, 'X');
Wynik:
A
System szesnastkowy ma podstawę 16. Dlatego liczba wynosi 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F przed ponownym rozpoczęciem (np. 10 w systemie szesnastkowym jest odpowiednikiem 16 w postaci dziesiętnej, a 11 jest odpowiednikiem 17 itd.). Dlatego przykład tutaj daje wynik A
, ponieważ szesnastkowo A
występuje po 9
.
Oto kolejny przykład, tym razem z większą liczbą:
SELECT FORMAT(7145, 'X');
Wynik:
1BE9
Format niestandardowy
Możesz również utworzyć własny format niestandardowy, używając niestandardowego ciągu formatu liczb. Składa się z serii niestandardowych specyfikatorów formatu liczb, które zapewniają wzorzec dla twojego numeru.
Łatwiej to wyjaśnić na przykładzie:
SELECT FORMAT(123456789, '##-###-####');
Wynik:
12-345-6789
W tym przypadku używam symbolu zastępczego cyfry (#
). Symbol zastępczy cyfry pozwala mi określić format numeru za pomocą #
symbol jako symbol zastępczy dla każdej liczby.
Przecinki
Inny przykład:
SELECT FORMAT(123456789, '#,#');
Wynik:
123,456,789
Wiodące zera
Innym niestandardowym specyfikatorem formatu liczb jest zero (0
). Możesz użyć tego do uzupełnienia liczby wiodącymi zerami:
SELECT FORMAT(7, '000') AS 'Example 1', FORMAT(123, '0000') AS 'Example 2', FORMAT(123, '00000') AS 'Example 3';
Wynik:
Example 1 Example 2 Example 3 --------- --------- --------- 007 0123 00123
Możesz go również użyć do usunięcia zer:
SELECT FORMAT(0123, '000') AS 'Example 1', FORMAT(0123, '0000') AS 'Example 2', FORMAT(000123, '00000') AS 'Example 3';
Wynik:
Example 1 Example 2 Example 3 --------- --------- --------- 123 0123 00123
Informacje o specyfikatorach formatu liczbowego
Poniższe artykuły zawierają wszystkie specyfikatory formatu liczb, których można używać z FORMAT()
funkcji, wraz z przykładami T-SQL.
- Standardowe ciągi formatu numerycznego
- Niestandardowe ciągi formatu liczb
Są to te same specyfikatory formatu, które są obsługiwane przez .NET Framework (FORMAT()
funkcja opiera się na .NET Framework).
Data i godzina
FORMAT()
funkcja pozwala również na formatowanie daty i czasu.
Data i godzina mają osobny zestaw specyfikatorów formatu:
- Ciągi standardowego formatu daty i godziny
- Niestandardowe ciągi formatu daty i godziny