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

Sådan fungerer FORMAT()-funktionen i SQL Server (T-SQL)

I SQL Server kan du bruge T-SQL FORMAT() funktion til at returnere værdier såsom tal og datoer som formaterede strenge.

Du angiver den værdi, der skal formateres, og du angiver det format, der skal bruges. Funktionen accepterer et valgfrit argument, der giver dig mulighed for at angive en kultur, der skal bruges, når du formaterer værdien.

Syntaks

Syntaksen ser sådan ud:

FORMAT ( value, format [, culture ] )

Hvor value er den værdi, du ønsker formateret, og format er en gyldig formatstreng, der angiver det ønskede format.

Den valgfri culture argument kan bruges til at specificere en kultur. Hvis det udelades, bruges sproget for den aktuelle session.

FORMAT funktion er ikke-deterministisk.

Eksempel 1 – Formater et tal

Her er et eksempel på formatering af et tal:

SELECT FORMAT(1, 'N') AS Result;

Resultat:

+----------+
| Result   |
|----------|
| 1.00     |
+----------+

I dette tilfælde brugte jeg N som formatstrengen. Dette er en standard numerisk formatangivelse til udlæsning af værdien som et tal. Denne særlige formatangivelse resulterer i, at outputtet formateres med integral- og decimalcifre, gruppeseparatorer og en decimalseparator med valgfrit negativt fortegn. Denne formatspecifikation skelner mellem store og små bogstaver, så enten N eller n er fint.

Eksempel 2 – Formatér til en valuta

Her er et eksempel på formatering af et tal som en valuta:

SELECT FORMAT(1, 'C') AS Result;

Resultat:

+----------+
| Result   |
|----------|
| $1.00    |
+----------+

Flere numeriske formater

Der er mange flere formatstrenge, der kan bruges med FORMAT() fungere. For eksempel er der formatstrenge for procenter, fikspunkt, eksponentiel (videnskabelig), hexadecimal og mere.

De numeriske formatstrenge er adskilt i standard og brugerdefinerede.

De følgende to artikler viser alle de numeriske formatstrenge, inklusive eksempler:

  • Standard numerisk formatstrenge
  • Tilpassede numeriske formatstrenge

Se også Sådan formateres tal i SQL Server for flere eksempler på formatering af tal.

Eksempel 3 – Formater en dato

Her er et eksempel på formatering af en dato:

SELECT 
  GETDATE() AS 'Unformatted Date',
  FORMAT( GETDATE(), 'D') AS 'Formatted Date';

Resultat:

+-------------------------+------------------------+
| Unformatted Date        | Formatted Date         |
|-------------------------+------------------------|
| 2019-05-08 06:16:55.613 | Wednesday, May 8, 2019 |
+-------------------------+------------------------+

I dette tilfælde brugte jeg D som angiver et langt datomønster.

Flere datoformater

Der er mange flere formatstrenge, der kan bruges til at formatere datoer. Som med de numeriske formatstrenge er dato- og tidsformatstrenge adskilt i standard og brugerdefinerede, så du kan bygge dine egne brugerdefinerede formater, eller du kan stole på et standardformat.

De følgende to artikler viser alle dato- og tidsformatstrengene, inklusive eksempler:

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

Se også Sådan formateres dato og klokkeslæt i SQL Server for flere eksempler.

Eksempel 4 – Den valgfri culture Argument

Her er et eksempel på brug af culture argument for at returnere en værdi i forskellige valutaer:

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

FORMAT() funktion accepterer enhver kultur understøttet af .NET Framework som et argument; det er ikke begrænset til de sprog, der eksplicit understøttes af SQL Server.

Hvis du ikke angiver dette argument, bruges sproget for den aktuelle session.

For flere eksempler, se Hvordan sprogindstillinger kan påvirke din FORMAT() Resultater.

Eksempel 5 – Ugyldig culture Argument

Hvis du angiver en ugyldig kultur, får du en fejlmeddelelse:

SELECT FORMAT(1, 'C', 'oop-SS!') AS 'Oops!';

Resultat:

The culture parameter 'oop-SS!' provided in the function call is not supported.

Eksempel 6 – Ugyldig formatværdi

Men for andre fejl returnerer funktionen NULL . For eksempel, her er hvad der sker, hvis jeg angiver en ugyldig værdi, der skal formateres:

SELECT FORMAT(GETDATE(), 'C') AS 'Result';

Resultat:

+----------+
| Result   |
|----------|
| NULL     |
+----------+

I dette tilfælde forsøgte jeg at formatere en dato til en valuta, og derfor var resultatet NULL .

Gyldige datatyper

FORMAT() er afhængig af tilstedeværelsen af ​​.NET Framework Common Language Runtime (CLR) og bruger CLR-formateringsreglerne.

Følgende datatyper kan formateres med FORMAT() fungere. Denne liste indeholder de acceptable datatyper for inputstrengen sammen med deres .NET Framework-tilknytningsækvivalente typer.

Kategori Typ .NET type
Numerisk stort Int64
Numerisk int Int32
Numerisk smallint Int16
Numerisk tinyint Byte
Numerisk decimal SqlDecimal
Numerisk numerisk SqlDecimal
Numerisk flyde Dobbelt
Numerisk rigtig Single
Numerisk småpenge Decimal
Numerisk penge Decimal
Dato og tid dato DatoTid
Dato og tid tid Tidsrum
Dato og tid datotid DatoTid
Dato og tid smalldatetime DatoTid
Dato og tid datetime2 DatoTid
Dato og tid datetime offset DatoTimeOffset

Undgåelse af koloner og perioder for 'tids'-datatypen

Når du bruger FORMAT , koloner og punktum skal escapes (dette overholder CLR-formateringsreglerne). Derfor, når formatstrengen (anden parameter) indeholder et kolon eller punktum, skal kolonet eller punktumet escapes med en omvendt skråstreg, når en inputværdi (første parameter) er af tiden datatype.

Eksempel:

SELECT 
  CAST('12:15' AS time) AS 'Unformatted Data',
  FORMAT(CAST('12:15' AS time), N'hh.mm') AS 'Unescaped',
  FORMAT(CAST('12:15' AS time), N'hh\.mm') AS 'Escaped';

Resultat:

+--------------------+-------------+-----------+
| Unformatted Data   | Unescaped   | Escaped   |
|--------------------+-------------+-----------|
| 12:15:00           | NULL        | 12.15     |
+--------------------+-------------+-----------+

Så som forventet returnerer den ikke-escapede streng NULL .

Det gælder som nævnt kun tidspunktet datatype. Hvis vi ændrer inputværdien til en anden datatype, behøver vi ikke undslippe den:

SELECT 
  CAST('12:15' AS datetime) AS 'Unformatted Data',
  FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Unescaped',
  FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Escaped';

Resultat:

+-------------------------+-------------+-----------+
| Unformatted Data        | Unescaped   | Escaped   |
|-------------------------+-------------+-----------|
| 1900-01-01 12:15:00.000 | 12.15       | 12.15     |
+-------------------------+-------------+-----------+

I dette tilfælde er inputværdien datetime , og derfor er resultatet fint uden at undslippe det.

Du kan også bruge omvendt skråstreg til at undslippe ethvert andet tegn, du ønsker inkluderet i resultatstrengen, som ellers ville blive fortolket som en formatspecifikation. Forud for et tegn med en omvendt skråstreg betyder det, at det følgende tegn er et bogstav, der skal inkluderes i resultatstrengen uændret.

I en tilpasset dato- og tidsformatstreng, d , f , F , g , h , H , K , m , M , s , t , y , z , : eller / tegn tolkes som brugerdefinerede formatspecifikationer snarere end som bogstavelige tegn.

I en tilpasset numerisk formatstreng, # , 0 , . , , , % og symboler fortolkes som formatspecifikationer snarere end som bogstavelige tegn. Store og små bogstaver E samt + og - symboler kan også fortolkes som formatspecifikationer, afhængigt af deres placering i formatstrengen.

Hvis du har brug for at inkludere en omvendt skråstreg i resultatstrengen, skal du undslippe den med en anden skråstreg.

Fjernbetjening

FORMAT() Funktionen kan ikke fjernstyres, da den afhænger af tilstedeværelsen af ​​CLR. Fjernelse af en funktion, der kræver CLR, kan forårsage en fejl på fjernserveren.

Hvornår skal du bruge FORMAT() Funktion

Microsoft anbefaler, at FORMAT() funktion bruges til lokalitetsbevidst formatering af dato/klokkeslæt og talværdier som strenge, og til generelle datatypekonverteringer, enten CAST() funktionen eller CONVERT() funktion skal bruges i stedet.


  1. Er det muligt at have en indekseret visning i MySQL?

  2. Hvordan bruger man Room Persistence Library med forududfyldt database?

  3. Postgresql GROUP_CONCAT tilsvarende?

  4. Anmodning indstillet i Concurrent Manager