sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man formaterar tal med kommatecken i SQL Server

SQL Server ger oss ett snabbt och enkelt sätt att formatera siffror med kommatecken insatta på relevant plats. Till exempel 1234.56 kan bli 1 234,56 . Eller det kan bli 1.234,56 , om det är det språk du använder.

Exempel

Vi kan använda FORMAT() funktion för att formatera siffror med kommatecken. När vi använder den här funktionen skickar vi numret och en formatsträng. Formatsträngen bestämmer hur numret kommer att formateras när det returneras.

FORMAT() funktion returnerar en formaterad strängrepresentation av talet, baserat på de värden vi tillhandahåller.

Här är ett exempel att visa:

SELECT 
    FORMAT(123456.789, 'N') AS "Number",
    FORMAT(123456.789, 'P') AS "Percent",
    FORMAT(123456.789, 'C') AS "Currency";

Resultat:

+------------+----------------+-------------+
| Number     | Percent        | Currency    |
|------------+----------------+-------------|
| 123,456.79 | 12,345,678.90% | $123,456.79 |
+------------+----------------+-------------+

Det här exemplet visar tre av standardsträngarna för numeriskt format:

  • Om vi ​​bara vill ha det formaterade numret kan vi använda N
  • Om vi ​​vill ha det formaterat som en procentandel kan vi använda P
  • För valuta kan vi använda C .

SQL Server är smart nog att känna till din aktuella lokalitet (baserat på språket för den aktuella sessionen) och formaterar resultatet enligt lokalens konventioner. Detta är viktigt eftersom alla inte bor i ett land som använder kommatecken som tusentalsavgränsare och punkt som decimalavskiljare.

Dessutom, FORMAT() funktion accepterar ett tredje valfritt "kultur"-argument, vilket gör att du explicit kan ange lokalen.

Här är ett exempel på vad jag menar:

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";

Resultat:

+------------+-----------------+--------------+
| Number     | Percent         | Currency     |
|------------+-----------------+--------------|
| 123.456,79 | 12.345.678,90 % | 123.456,79 € |
+------------+-----------------+--------------+

I det här fallet anger jag de-de som kulturen, vilket innebär att resultaten kommer att formateras enligt tyska konventioner. Vi kan se att punkter används som gruppavgränsare, och ett kommatecken används för decimalavgränsaren.

Om det tredje argumentet utelämnas används språket för den aktuella sessionen.

Anpassade formatsträngar

Det är också möjligt att använda anpassade formatspecifikationer för att konstruera dina egna anpassade formatsträngar. Till exempel, # tecknet är en sifferplatshållare, 0 är en nollplatshållare, kommatecken (, ) är en platshållare för gruppavgränsaren och punkten (. ) är en platshållare för decimalavskiljaren.

Detta gäller oavsett vilken språkinställning som används – SQL Server kommer att räkna ut vilka tecken som ska användas för grupp- och decimalavgränsare baserat på den aktuella lokalen.

Exempel:

SELECT 
    FORMAT(123456.789, '###,###,###.##', 'en-us') AS "US English",
    FORMAT(123456.789, '###,###,###.##', 'de-de') AS "German";

Resultat:

+--------------+------------+
| US English   | German     |
|--------------+------------|
| 123,456.79   | 123.456,79 |
+--------------+------------+

I båda fallen använde jag samma formatsträng, men SQL Server returnerade grupp- och decimalavgränsare som var tillämpliga på den angivna lokalen (som specificerades med det tredje "kultur"-argumentet).

I exemplet ovan innehåller formatsträngen fler siffror än det faktiska numret. Oavsett vilket valde SQL Server att inte returnera några inledande nollor. Det beror på att vi använde # formatspecifikation.

Om vi ​​vill att SQL Server ska returnera inledande nollor kan vi använda 0 formatspecifikation:

SELECT 
    FORMAT(123456.789, '000,000,000.00', 'en-us') AS "US English",
    FORMAT(123456.789, '000,000,000.00', 'de-de') AS "German";

Resultat:

+----------------+----------------+
| US English     | German         |
|----------------+----------------|
| 000,123,456.79 | 000.123.456,79 |
+----------------+----------------+

  1. Förbättra prestandan för UDF:er med NULL ON NULL INPUT

  2. Trigger kontra kontrollbegränsning

  3. Hur man skapar en offline-app för internationalisering:Stöd flera språk

  4. LISTAGG() Funktion i Oracle