SQL Server zapewnia nam szybki i łatwy sposób formatowania liczb z przecinkami wstawionymi w odpowiednim miejscu. Na przykład 1234.56 może stać się 1234,56 . Lub może stać się 1.234,56 , jeśli to jest lokalizacja, której używasz.
Przykład
Możemy użyć FORMAT()
funkcja formatowania liczb z przecinkami. Kiedy używamy tej funkcji, przekazujemy numer i ciąg formatujący. Ciąg formatu określa, w jaki sposób liczba zostanie sformatowana po zwróceniu.
FORMAT()
funkcja zwraca sformatowany ciąg reprezentujący liczbę, na podstawie podanych przez nas wartości.
Oto przykład do zademonstrowania:
SELECT
FORMAT(123456.789, 'N') AS "Number",
FORMAT(123456.789, 'P') AS "Percent",
FORMAT(123456.789, 'C') AS "Currency";
Wynik:
+------------+----------------+-------------+ | Number | Percent | Currency | |------------+----------------+-------------| | 123,456.79 | 12,345,678.90% | $123,456.79 | +------------+----------------+-------------+
Ten przykład ilustruje trzy standardowe ciągi formatu liczb:
- Jeśli chcemy tylko sformatowaną liczbę, możemy użyć
N
- Jeśli chcemy, aby był sformatowany jako procent, możemy użyć
P
- W przypadku waluty możemy użyć
C
.
SQL Server jest na tyle sprytny, że zna Twoje aktualne ustawienia regionalne (na podstawie języka bieżącej sesji) i formatuje wynik zgodnie z konwencją tych ustawień regionalnych. Jest to ważne, ponieważ nie wszyscy mieszkają w kraju, w którym przecinek jest separatorem tysięcy, a kropka jest separatorem dziesiętnym .
Ponadto FORMAT()
funkcja akceptuje trzeci opcjonalny argument „culture”, który umożliwia jawne określenie ustawień regionalnych.
Oto przykład tego, co mam na myśli:
SELECT
FORMAT(123456.789, 'N', 'de-de') AS "Number",
FORMAT(123456.789, 'P', 'de-de') AS "Percent",
FORMAT(123456.789, 'C', 'de-de') AS "Currency";
Wynik:
+------------+-----------------+--------------+ | Number | Percent | Currency | |------------+-----------------+--------------| | 123.456,79 | 12.345.678,90 % | 123.456,79 € | +------------+-----------------+--------------+
W tym przypadku określam de-de
jako kultura, co oznacza, że wyniki zostaną sformatowane zgodnie z konwencjami niemieckimi. Widzimy, że kropki są używane jako separator grup, a przecinek jest używany jako separator dziesiętny .
Jeśli trzeci argument zostanie pominięty, używany jest język bieżącej sesji.
Niestandardowe ciągi formatujące
Możliwe jest również użycie niestandardowych specyfikatorów formatu do konstruowania własnych niestandardowych ciągów formatu. Na przykład #
znak jest cyfrą zastępczą, 0
jest zerowym symbolem zastępczym, przecinkiem (,
) to symbol zastępczy separatora grup i kropki (.
) to symbol zastępczy separatora dziesiętnego .
Dzieje się tak niezależnie od używanego ustawienia narodowego – SQL Server określi, które znaki użyć jako separatorów grup i dziesiętnych w oparciu o bieżące ustawienia regionalne.
Przykład:
SELECT
FORMAT(123456.789, '###,###,###.##', 'en-us') AS "US English",
FORMAT(123456.789, '###,###,###.##', 'de-de') AS "German";
Wynik:
+--------------+------------+ | US English | German | |--------------+------------| | 123,456.79 | 123.456,79 | +--------------+------------+
W obu przypadkach użyłem tego samego ciągu formatu, ale SQL Server zwrócił separatory grupy i dziesiętne, które miały zastosowanie do określonych ustawień regionalnych (co zostało określone w trzecim argumencie „culture”).
W powyższym przykładzie ciąg formatujący zawiera więcej cyfr niż rzeczywista liczba. Niezależnie od tego, SQL Server zdecydował się nie zwracać żadnych wiodących zer. To dlatego, że użyliśmy #
specyfikator formatu.
Jeśli chcemy, aby SQL Server zwracał wiodące zera, możemy użyć 0
specyfikator formatu:
SELECT
FORMAT(123456.789, '000,000,000.00', 'en-us') AS "US English",
FORMAT(123456.789, '000,000,000.00', 'de-de') AS "German";
Wynik:
+----------------+----------------+ | US English | German | |----------------+----------------| | 000,123,456.79 | 000.123.456,79 | +----------------+----------------+