sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man formaterar siffror i SQL Server

Från och med SQL Server 2012 kan du formatera numeriska typer med T-SQL FORMAT() fungera. Denna funktion accepterar tre argument; numret, formatet och ett valfritt "kultur"-argument.

Den returnerar en formaterad sträng av typen nvarchar .

Formatet levereras som en formatsträng. En formatsträng definierar hur utdata ska formateras.

Här är ett exempel:

SELECT FORMAT(1, 'N');

Resultat:

1.00

I det här fallet använde jag N som det andra argumentet. Detta är det numeriska standardformatet för Number. Denna speciella formatspecifikator (N ) resulterar i att utdata formateras med heltals- och decimalsiffror, gruppavgränsare och en decimalavgränsare med valfritt negativt tecken. Detta argument är skiftlägesokänsligt, så antingen N eller n är bra.

Decimaler

Här är ett annat exempel, den här gången med N1 för att ange att vi bara vill ha en decimal:

SELECT FORMAT(1, 'N1');

Resultat:

1.0

Men du kan också öka antalet decimaler också:

SELECT FORMAT(1, 'N7');

Resultat:

1.0000000

I dessa exempel är 1 och 7 är kända som precisionsspecificerare .

Precisionsspecifikationer är valfria. De kan vara ett värde från 0 till 99, vilket anger precisionen för resultatet. Hur det fungerar beror på vilken formatspecifikation som används. För vissa formatspecificerare kommer det att ange det totala antalet siffror i resultatet, för andra kommer det att ange antalet decimaler. I andra fall kommer det att ignoreras helt. Se hela listan med specifikationer för standardnumeriskt format för att se hur precisionsspecifikationer påverkar utdata från varje formatspecifikation.

Procent

Följande exempel använder P argument, som formaterar talet som ett procentvärde. Den multiplicerar talet med 100 och lägger sedan till ett lokaliserat procenttecken.

SELECT 
    FORMAT(1, 'P') AS 'Example 1', 
    FORMAT(.375, 'P') AS 'Example 2', 
    FORMAT(.0375, 'P', 'tr-tr') AS 'Example 3';

Resultat:

Example 1  Example 2  Example 3
---------  ---------  ---------
100.00 %   37.50 %    %3,75   

Observera att "Exempel 3" inkluderar ett tredje argument, som anger kulturen som ska användas i utdata. I det här fallet använder jag tr-tr för turkiska. Detta resulterar i att procenttecknet läggs till numret (istället för att läggas till, som de andra). Det resulterar också i att ett kommatecken används som decimalavgränsare.

Om du inte anger "kultur"-argumentet används språket för den aktuella sessionen.

Som du kanske föreställer dig kan du få helt olika resultat beroende på ditt nuvarande språk eller värdet av ett "kultur"-argument. Se Hur språkinställningar kan påverka dina FORMAT()-resultat för fler exempel.

Valuta

Du kan använda C för att returnera ett valutavärde.

SELECT FORMAT(1, 'C');

Resultat:

$1.00

Du kan också lägga till i locale som en tredje parameter.

Här är några exempel:

SELECT 
    FORMAT(1, 'C', 'fr-FR') AS France, 
    FORMAT(1, 'C', 'th-TH') AS Thailand, 
    FORMAT(1, 'C', 'ja-JP') AS Japan;

Resultat:

France  Thailand  Japan
------  --------  -----
1,00 €  ฿1.00     ¥1   

Exponentiell (vetenskaplig)

Du kan använda E för att ange exponentiell notation.

SELECT FORMAT(1234.56789, 'E');

Resultat:

1.234568E+003  

Hexadecimal

Du kan till och med formatera ett tal som hexadecimalt. För att göra detta, använd X argument:

SELECT FORMAT(10, 'X');

Resultat:

A

Hexadecimal är bas 16. Därför går räkningen 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F innan man börjar igen (t.ex. 10 i hexadecimal är ekvivalenten med 16 i decimal och 11 motsvarar 17 osv.). Det är därför exemplet här resulterar i A , eftersom i hexadecimal, A kommer efter 9 .

Här är ett annat exempel, den här gången med ett större antal:

SELECT FORMAT(7145, 'X');

Resultat:

1BE9

Anpassat format

Du kan också skapa ditt eget anpassade format genom att använda en anpassad numerisk formatsträng. Detta består av en serie anpassade numeriska formatspecifikationer som tillhandahåller ett mönster för ditt nummer.

Detta är lättare att förklara med ett exempel:

SELECT FORMAT(123456789, '##-###-####');

Resultat:

12-345-6789

I det här fallet använder jag sifferplatshållaren (# ). Sifferplatshållaren låter mig ange ett format för numret med # symbol som platshållare för varje nummer.

Komtecken

Ett annat exempel:

SELECT FORMAT(123456789, '#,#');

Resultat:

123,456,789

Inledande nollor

En annan anpassad numerisk formatspecifikation är noll (0 ). Du kan använda detta för att fylla ett nummer med inledande nollor:

SELECT
    FORMAT(7, '000') AS 'Example 1',
    FORMAT(123, '0000') AS 'Example 2',
    FORMAT(123, '00000') AS 'Example 3';

Resultat:

Example 1  Example 2  Example 3
---------  ---------  ---------
007        0123       00123    

Du kan också använda den för att ta bort nollor:

SELECT 
    FORMAT(0123, '000') AS 'Example 1',
    FORMAT(0123, '0000') AS 'Example 2',
    FORMAT(000123, '00000') AS 'Example 3';

Resultat:

Example 1  Example 2  Example 3
---------  ---------  ---------
123        0123       00123    

Referens för numeriska formatspecifikationer

Följande artiklar innehåller alla numeriska formatspecifikationer som du kan använda med FORMAT() funktion, tillsammans med T-SQL-exempel.

  • Stängar med standardnumeriskt format
  • Strängar med anpassat numeriskt format

Dessa är samma formatspecifikationer som stöds av .NET Framework (FORMAT() funktion förlitar sig på .NET Framework).

Datum och tid

FORMAT() funktionen låter dig även formatera datum och tid.

Datum och tid har en separat uppsättning formatspecifikationer:

  • Stängar för standardformat för datum och tid
  • Anpassade datum- och tidsformatsträngar

  1. Använda Transaktion ROLLBACK i SQL Server

  2. Vad i helvete är en DTU?

  3. Få antalet dagar mellan två datum i Oracle, inklusive datumen

  4. Förstå index i MySQL:Del tre