Udostępnij za pośrednictwem


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 musi zawierać prawidłowy ciąg formatu programu .NET Framework jako standardowy ciąg formatu (na przykład lub ), albo jako wzorzec znaków niestandardowych dla dat i wartości liczbowych (na przykład ). Formatowanie złożone nie jest obsługiwane.

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 , używany jest język bieżącej sesji. Ten język jest ustawiany niejawnie lub jawnie przy użyciu instrukcji 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 kultury jest nieprawidłowy, zgłasza błąd.

Typy zwracane

nvarchar lub null

Długość wartości zwracanej jest określana w formacie .

Uwagi

zwraca błędów innych niż kultury, które nie są prawidłowe. Na przykład 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 pieniędzy 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