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.