sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan formateres tal i SQL Server

Fra SQL Server 2012 kan du formatere numeriske typer ved hjælp af T-SQL FORMAT() fungere. Denne funktion accepterer tre argumenter; tallet, formatet og et valgfrit "kultur"-argument.

Det returnerer en formateret streng af typen nvarchar .

Formatet leveres som en formatstreng. En formatstreng definerer, hvordan outputtet skal formateres.

Her er et eksempel:

SELECT FORMAT(1, 'N');

Resultat:

1.00

I dette tilfælde brugte jeg N som det andet argument. Dette er standard numerisk formatspecifikation for Number. Denne særlige formatspecifikation (N ) resulterer i, at outputtet formateres med integral- og decimalcifre, gruppeseparatorer og en decimalseparator med valgfrit negativt fortegn. Dette argument skelner mellem store og små bogstaver, så enten N eller n er fint.

Decimaler

Her er endnu et eksempel, denne gang ved hjælp af N1 for at angive, at vi kun vil have én decimal:

SELECT FORMAT(1, 'N1');

Resultat:

1.0

Men du kan også øge antallet af decimaler:

SELECT FORMAT(1, 'N7');

Resultat:

1.0000000

I disse eksempler er 1 og 7 er kendt som præcisionsspecifikationer .

Præcisionsspecifikationer er valgfrie. De kan være en værdi fra 0 til 99, som angiver nøjagtigheden af ​​resultatet. Hvordan det fungerer afhænger af den formatspecifikation, der bruges. For nogle formatspecifikationer vil det angive det samlede antal cifre i resultatet, for andre vil det angive antallet af decimaler. I andre tilfælde vil det blive ignoreret helt. Se den fulde liste over standard numerisk format specifikationer for at se, hvordan præcisions specifikationer påvirker output fra hver format specifikator.

Procent

Følgende eksempler bruger P argument, som formaterer tallet som en procentværdi. Den multiplicerer tallet med 100 og tilføjer derefter et lokaliseret procenttegn.

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   

Bemærk, at "Eksempel 3" inkluderer et tredje argument, som specificerer den kultur, der skal bruges i outputtet. I dette tilfælde bruger jeg tr-tr for tyrkisk. Dette resulterer i, at procenttegnet sættes foran tallet (i stedet for tilføjet, ligesom de andre). Det resulterer også i, at et komma bruges som decimalseparator.

Hvis du ikke angiver "kultur"-argumentet, bruges sproget for den aktuelle session.

Som du måske forestiller dig, kan du få helt forskellige resultater afhængigt af dit nuværende sprog eller værdien af ​​ethvert "kultur"-argument. Se Hvordan sprogindstillinger kan påvirke dine FORMAT()-resultater for flere eksempler.

Valuta

Du kan bruge C for at returnere en valutaværdi.

SELECT FORMAT(1, 'C');

Resultat:

$1.00

Du kan også tilføje lokaliteten som en tredje parameter.

Her er nogle eksempler:

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   

Eksponentiel (videnskabelig)

Du kan bruge E for at angive eksponentiel notation.

SELECT FORMAT(1234.56789, 'E');

Resultat:

1.234568E+003  

Hexadecimal

Du kan endda formatere et tal som hexadecimalt. For at gøre dette skal du bruge X argument:

SELECT FORMAT(10, 'X');

Resultat:

A

Hexadecimal er basis 16. Derfor går tallet 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, før det starter igen (f.eks. 10 i hexadecimal er det tilsvarende på 16 i decimal, og 11 svarer til 17 osv.). Det er derfor, eksemplet her resulterer i A , fordi i hexadecimal, A kommer efter 9 .

Her er endnu et eksempel, denne gang med et større antal:

SELECT FORMAT(7145, 'X');

Resultat:

1BE9

Brugerdefineret format

Du kan også oprette dit eget brugerdefinerede format ved at bruge en brugerdefineret numerisk formatstreng. Dette består af en række brugerdefinerede numeriske formatspecifikationer, der giver et mønster til dit nummer.

Dette er lettere forklaret med et eksempel:

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

Resultat:

12-345-6789

I dette tilfælde bruger jeg cifferpladsholderen (# ). Cifferpladsholderen giver mig mulighed for at angive et format for nummeret ved at bruge # symbol som pladsholder for hvert tal.

Kommaer

Et andet eksempel:

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

Resultat:

123,456,789

Første nuller

En anden brugerdefineret numerisk formatspecifikation er nul (0 ). Du kan bruge dette til at udfylde et tal med foranstillede nuller:

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 også bruge det til at fjerne nuller:

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    

Numerisk formatspecifikationsreference

De følgende artikler indeholder alle de numeriske formatspecifikationer, du kan bruge med FORMAT() funktion sammen med T-SQL-eksempler.

  • Standard numerisk formatstrenge
  • Tilpassede numeriske formatstrenge

Dette er de samme formatspecifikationer, som understøttes af .NET Framework (FORMAT() funktion er afhængig af .NET Framework).

Dato og tid

FORMAT() funktionen giver dig også mulighed for at formatere dato og klokkeslæt.

Dato og klokkeslæt har et separat sæt formatspecifikationer:

  • Standard dato- og tidsformatstrenge
  • Tilpassede dato- og tidsformatstrenge

  1. Sådan konverteres et heltal til en decimal i SQL Server

  2. hvordan man præfikser en streng før sekvens genereret af postgresql?

  3. Forespørger på en linket sql-server

  4. Oracle JDBC:ugyldigt brugernavn/adgangskode (ora-01017)