FORMAT (Transact-SQL)
Dotyczy:sql ServerAzure SQL DatabaseAzure SQL Managed Instancepunkt końcowy usługi Azure Synapse AnalyticsSQL Analytics w usłudze Microsoft FabricWarehouse w usłudze Microsoft Fabric
Zwraca wartość sformatowaną przy użyciu określonego formatu i kultury opcjonalnej. Użyj funkcji FORMAT
do formatowania ustawień regionalnych wartości daty/godziny i liczby jako ciągów. W przypadku ogólnych konwersji typów danych użyj CAST
lub CONVERT
.
Transact-SQL konwencje składni
Składnia
FORMAT( value , format [ , culture ] )
Argumenty
wartości
Wyrażenie obsługiwanego typu danych do formatowania. Aby uzyskać listę prawidłowych typów, zobacz tabelę w sekcji Uwagi.
format
wzorzec formatu nvarchar.
Argument formatu
Aby uzyskać pełne wyjaśnienie tych wzorców formatowania, zapoznaj się z dokumentacją platformy .NET Framework dotyczącą formatowania ciągów w formatach ogólnych, niestandardowych formatów daty i godziny oraz niestandardowych formatów liczb. Aby uzyskać więcej informacji, zobacz Typy formatowania.
kultury
Opcjonalny argument nvarchar określający kulturę.
Jeśli nie podano argumentu kultury SET LANGUAGE
.
kultury akceptuje dowolną kulturę obsługiwaną przez program .NET Framework jako argument; nie jest on ograniczony do języków jawnie obsługiwanych przez program SQL Server. Jeśli argument
Typy zwracane
nvarchar lub null
Długość wartości zwracanej jest określana w formacie .
Uwagi
NULL
jest zwracana, jeśli wartość określona w formacie jest nieprawidłowa.
Funkcja FORMAT
jest nieokreślona.
FORMAT
opiera się na obecności środowiska uruchomieniowego języka wspólnego programu .NET Framework (CLR).
Nie można zdalnie stosować tej funkcji, ponieważ zależy od obecności środowiska CLR. Komunikacja zdalna funkcji, która wymaga clR, może spowodować błąd na serwerze zdalnym.
FORMAT
opiera się na regułach formatowania CLR, które określają, że dwukropki i kropki muszą być unikane. W związku z tym, gdy ciąg formatu (drugi parametr) zawiera dwukropek lub kropkę, dwukropek lub kropka musi zostać unikniętą ukośnikiem odwrotnym, gdy wartość wejściowa (pierwszy parametr) jest typu danych czasu. Zobacz D. FORMAT z typami danych czasu.
W poniższej tabeli wymieniono dopuszczalne typy danych dla wartości wraz z ich typami równoważnymi mapowania programu .NET Framework.
Kategoria | Typ | Typ platformy .NET |
---|---|---|
Numeryczny | bigint | Int64 |
Numeryczny | Int32 |
|
Numeryczny | smallint | Int16 |
Numeryczny | tinyint | Byte |
Numeryczny | dziesiętnych | SqlDecimal |
Numeryczny | liczbowe | SqlDecimal |
Numeryczny | zmiennoprzecinkowe | Double |
Numeryczny | rzeczywiste | Single |
Numeryczny | małe | Decimal |
Numeryczny | |
Decimal |
Data i godzina | daty |
DateTime |
Data i godzina | czasu |
TimeSpan |
Data i godzina | data/godzina | DateTime |
Data i godzina | smalldatetime | DateTime |
Data i godzina | data/godzina2 | DateTime |
Data i godzina | datetimeoffset |
DateTimeOffset |
Przykłady
A. Przykład prostego formatu
Poniższy przykład zwraca prostą datę sformatowaną dla różnych kultur.
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)';
Oto zestaw wyników.
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 z niestandardowymi ciągami formatowania
W poniższym przykładzie pokazano formatowanie wartości liczbowych przez określenie formatu niestandardowego. W przykładzie przyjęto założenie, że bieżąca data to 9 sierpnia 2024 r. Aby uzyskać więcej informacji na temat tych i innych formatów niestandardowych, zobacz niestandardowe ciągi formatu liczbowego.
DECLARE @d AS DATE = GETDATE();
SELECT FORMAT(@d, 'dd/MM/yyyy', 'en-US') AS 'Date',
FORMAT(123456789, '###-##-####') AS 'Custom Number';
Oto zestaw wyników.
Date Custom Number
----------- --------------
09/08/2024 123-45-6789
C. FORMAT z typami liczbowymi
Poniższy przykład zwraca pięć wierszy z tabeli Sales.CurrencyRate
w bazie danych AdventureWorks2022
. Kolumna EndOfDateRate
jest przechowywana jako typ pieniędzy w tabeli. W tym przykładzie kolumna jest zwracana jako niesformatowana, a następnie sformatowana przez określenie formatu numeru platformy .NET, formatu ogólnego i typów formatu waluty. Aby uzyskać więcej informacji na temat tych i innych formatów liczbowych, zobacz Standardowe ciągi formatu liczbowego.
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;
Oto zestaw wyników.
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
W tym przykładzie określono kulturę niemiecką (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 z typami danych czasu
FORMAT
zwraca NULL
w takich przypadkach, ponieważ .
i :
nie są usuwane.
SELECT FORMAT(CAST('07:35' AS TIME), N'hh.mm'); --> returns NULL
SELECT FORMAT(CAST('07:35' AS TIME), N'hh:mm'); --> returns NULL
Format zwraca sformatowany ciąg, ponieważ .
i :
są usuwane.
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
Format zwraca sformatowany bieżący czas z określonym am lub PM.
SELECT FORMAT(SYSDATETIME(), N'hh:mm tt'); --> returns 03:46 PM
SELECT FORMAT(SYSDATETIME(), N'hh:mm t'); --> returns 03:46 P
Format zwraca określony czas, wyświetlając 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
Format zwraca określony czas, wyświetlając 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
Format zwraca określony czas w formacie 24-godzinnym.
SELECT FORMAT(CAST('2018-01-01 14:00' AS DATETIME2), N'HH:mm'); --> returns 14:00
E. Formatowanie z separatorami przecinków dla dużych liczb
W poniższym przykładzie pokazano, jak sformatować duże liczby z separatorami przecinków.
SELECT FORMAT(1234567.89, 'N0') AS FormattedNumber;
Oto zestaw wyników.
1,234,568
W tym przykładzie użyto specyfikatora formatu N
. Specyfikator N
jest używany dla wartości liczbowych, a liczbę miejsc dziesiętnych można dostosować, zmieniając ciąg formatu (na przykład N2
dla dwóch miejsc dziesiętnych).
FORMAT ( value, format_string [, culture ] )
Parametry
-
value
: wartość do sformatowania. -
format_string
: ciąg określający format do zastosowania. -
culture
: (Opcjonalnie) Ciąg określający kulturę do użycia do formatowania.
SELECT FORMAT(1234567.89, 'N0') AS FormattedNumber;
1,234,568