FORMAT (Transact-SQL)
gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft Fabric
Returnerar ett värde formaterat med det angivna formatet och valfri kultur. Använd funktionen FORMAT
för språkmedveten formatering av datum-/tids- och talvärden som strängar. För allmänna datatypkonverteringar använder du CAST
eller CONVERT
.
Transact-SQL syntaxkonventioner
Syntax
FORMAT( value , format [ , culture ] )
Argument
värde
Uttryck för en datatyp som stöds för formatering. En lista över giltiga typer finns i tabellen i avsnittet Kommentarer.
format
nvarchar formatmönster.
Argumentet format måste innehålla en giltig .NET Framework-formatsträng, antingen som en standardformatsträng (till exempel "C"
eller "D"
), eller som ett mönster med anpassade tecken för datum och numeriska värden (till exempel "MMMM DD, yyyy (dddd)"
). Sammansatt formatering stöds inte.
En fullständig förklaring av dessa formateringsmönster finns i .NET Framework-dokumentationen om strängformatering i allmänna, anpassade datum- och tidsformat och anpassade nummerformat. Mer information finns i Formateringstyper.
kultur
Valfritt nvarchar argument som anger en kultur.
Om argumentet kultur inte anges används språket för den aktuella sessionen. Det här språket anges antingen implicit eller explicit med hjälp av SET LANGUAGE
-instruktionen.
kultur accepterar alla kulturer som stöds av .NET Framework som argument. Det är inte begränsat till de språk som uttryckligen stöds av SQL Server. Om argumentet kultur inte är giltigt skapar FORMAT
ett fel.
Returtyper
nvarchar eller null
Längden på returvärdet bestäms av format.
Anmärkningar
FORMAT
returnerar NULL
för andra fel än en kultur som inte är giltig. Till exempel returneras NULL
om värdet som anges i format inte är giltigt.
Funktionen FORMAT
är nondeterministisk.
FORMAT
förlitar sig på förekomsten av .NET Framework Common Language Runtime (CLR).
Den här funktionen kan inte fjärranslutas eftersom den beror på förekomsten av CLR. Fjärrkommunikation av en funktion som kräver CLR kan orsaka ett fel på fjärrservern.
FORMAT
förlitar sig på CLR-formateringsregler, som dikterar att kolon och perioder måste vara undantagna. När formatsträngen (den andra parametern) innehåller ett kolon eller en period måste därför kolonet eller perioden vara undantagna med omvänt snedstreck när ett indatavärde (första parametern) är av tid datatyp. Se D. FORMAT med tidsdatatyper.
I följande tabell visas de godtagbara datatyperna för -värdet argument tillsammans med deras .NET Framework-mappning av motsvarande typer.
Kategori | Typ | .NET-typ |
---|---|---|
Numerisk | bigint | Int64 |
Numerisk | int | Int32 |
Numerisk | liten | Int16 |
Numerisk | pytteliten | Byte |
Numerisk | decimal | SqlDecimal |
Numerisk | numeriska | SqlDecimal |
Numerisk | flyttal | Double |
Numerisk | riktiga | Single |
Numerisk | smallmoney | Decimal |
Numerisk | pengar | Decimal |
Datum och tid | datum | DateTime |
Datum och tid | tid | TimeSpan |
Datum och tid | datetime | DateTime |
Datum och tid | smalldatetime | DateTime |
Datum och tid | datetime2 | DateTime |
Datum och tid | datetimeoffset | DateTimeOffset |
Exempel
A. Exempel på enkelt FORMAT
I följande exempel returneras ett enkelt datum formaterat för olika kulturer.
DECLARE @d AS DATE = '08/09/2024';
SELECT FORMAT(@d, 'd', 'en-US') AS 'US English',
FORMAT(@d, 'd', 'en-gb') AS 'British English',
FORMAT(@d, 'd', 'de-de') AS 'German',
FORMAT(@d, 'd', 'zh-cn') AS 'Chinese Simplified (PRC)';
SELECT FORMAT(@d, 'D', 'en-US') AS 'US English',
FORMAT(@d, 'D', 'en-gb') AS 'British English',
FORMAT(@d, 'D', 'de-de') AS 'German',
FORMAT(@d, 'D', 'zh-cn') AS 'Chinese Simplified (PRC)';
Här är resultatuppsättningen.
US English British English German Simplified Chinese (PRC)
----------- ---------------- ----------- -------------------------
8/9/2024 09/08/2024 09.08.2024 2024/8/9
US English British English German Chinese (Simplified PRC)
----------------------- ---------------- ------------------------ -------------------------
Friday, August 9, 2024 09 August 2024 Freitag, 9. August 2024 2024年8月9日
B. FORMAT med anpassade formateringssträngar
I följande exempel visas formatering av numeriska värden genom att ange ett anpassat format. Exemplet förutsätter att det aktuella datumet är den 9 augusti 2024. Mer information om dessa och andra anpassade format finns i Anpassade numeriska formatsträngar.
DECLARE @d AS DATE = GETDATE();
SELECT FORMAT(@d, 'dd/MM/yyyy', 'en-US') AS 'Date',
FORMAT(123456789, '###-##-####') AS 'Custom Number';
Här är resultatuppsättningen.
Date Custom Number
----------- --------------
09/08/2024 123-45-6789
C. FORMAT med numeriska typer
I följande exempel returneras fem rader från tabellen Sales.CurrencyRate
i AdventureWorks2022
-databasen. Kolumnen EndOfDateRate
lagras som typ pengar i tabellen. I det här exemplet returneras kolumnen oformaterad och formateras sedan genom att ange formattyperna .NET Number, Allmänt format och Valuta. Mer information om dessa och andra numeriska format finns i Numeriska standardformatsträngar.
SELECT TOP (5) CurrencyRateID,
EndOfDayRate,
FORMAT(EndOfDayRate, 'N', 'en-us') AS 'Numeric Format',
FORMAT(EndOfDayRate, 'G', 'en-us') AS 'General Format',
FORMAT(EndOfDayRate, 'C', 'en-us') AS 'Currency Format'
FROM Sales.CurrencyRate
ORDER BY CurrencyRateID;
Här är resultatuppsättningen.
CurrencyRateID EndOfDayRate Numeric Format General Format Currency Format
-------------- ------------ -------------- -------------- ---------------
1 1.0002 1.00 1.0002 $1.00
2 1.55 1.55 1.5500 $1.55
3 1.9419 1.94 1.9419 $1.94
4 1.4683 1.47 1.4683 $1.47
5 8.2784 8.28 8.2784 $8.28
Det här exemplet anger den tyska kulturen (de-de
).
SELECT TOP (5) CurrencyRateID,
EndOfDayRate,
FORMAT(EndOfDayRate, 'N', 'de-de') AS 'Numeric Format',
FORMAT(EndOfDayRate, 'G', 'de-de') AS 'General Format',
FORMAT(EndOfDayRate, 'C', 'de-de') AS 'Currency Format'
FROM Sales.CurrencyRate
ORDER BY CurrencyRateID;
CurrencyRateID EndOfDayRate Numeric Format General Format Currency Format
-------------- ------------ -------------- -------------- ---------------
1 1.0002 1,00 1,0002 1,00 €
2 1.55 1,55 1,5500 1,55 €
3 1.9419 1,94 1,9419 1,94 €
4 1.4683 1,47 1,4683 1,47 €
5 8.2784 8,28 8,2784 8,28 €
D. FORMAT med tidsdatatyper
FORMAT
returnerar NULL
i dessa fall eftersom .
och :
inte är undantagna.
SELECT FORMAT(CAST('07:35' AS TIME), N'hh.mm'); --> returns NULL
SELECT FORMAT(CAST('07:35' AS TIME), N'hh:mm'); --> returns NULL
Formatet returnerar en formaterad sträng eftersom .
och :
är undantagna.
SELECT FORMAT(CAST('07:35' AS TIME), N'hh\.mm'); --> returns 07.35
SELECT FORMAT(CAST('07:35' AS TIME), N'hh\:mm'); --> returns 07:35
Formatet returnerar en formaterad aktuell tid med AM eller PM angivet.
SELECT FORMAT(SYSDATETIME(), N'hh:mm tt'); --> returns 03:46 PM
SELECT FORMAT(SYSDATETIME(), N'hh:mm t'); --> returns 03:46 P
Formatet returnerar den angivna tiden och visar AM.
SELECT FORMAT(CAST('2018-01-01 01:00' AS DATETIME2), N'hh:mm tt'); --> returns 01:00 AM
SELECT FORMAT(CAST('2018-01-01 01:00' AS DATETIME2), N'hh:mm t'); --> returns 01:00 A
Formatet returnerar den angivna tiden och visar PM.
SELECT FORMAT(CAST('2018-01-01 14:00' AS DATETIME2), N'hh:mm tt'); --> returns 02:00 PM
SELECT FORMAT(CAST('2018-01-01 14:00' AS DATETIME2), N'hh:mm t'); --> returns 02:00 P
Formatet returnerar den angivna tiden i 24-timmarsformat.
SELECT FORMAT(CAST('2018-01-01 14:00' AS DATETIME2), N'HH:mm'); --> returns 14:00
E. Formatera med kommaavgränsare för stora tal
I följande exempel visas hur du formaterar stora tal med kommaavgränsare.
SELECT FORMAT(1234567.89, 'N0') AS FormattedNumber;
Här är resultatuppsättningen.
1,234,568
I det här exemplet används N
formatspecificerare. Den N
-specificeraren används för numeriska värden och antalet decimaler kan justeras genom att ändra formatsträngen (till exempel N2
för två decimaler).
FORMAT ( value, format_string [, culture ] )
Parametrar
-
value
: Värdet som ska formateras. -
format_string
: En sträng som anger vilket format som ska tillämpas. -
culture
: (Valfritt) En sträng som anger vilken kultur som ska användas för formatering.
SELECT FORMAT(1234567.89, 'N0') AS FormattedNumber;
1,234,568