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

Jak formatować liczby przecinkami w SQL Server

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Statystyka obiektów bazy danych SQL Server

  2. Dla Nvarchar(Max) otrzymuję tylko 4000 znaków w TSQL?

  3. Czy mogę użyć instrukcji CASE w warunku JOIN?

  4. Jak mogę zmienić tryb SQL Server Windows na tryb mieszany (SQL Server 2008)?

  5. SQL Server:Awaria łącza komunikacyjnego Wymagany SSL (nie udało się odebrać pakietu)