Dela via


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