Поделиться через


FORMAT (Transact-SQL)

Возвращает значение, указанное в формате, языке и региональных параметрах (необязательно) в SQL Server 2012. Для выполнения форматирования значения даты, времени и чисел с учетом локали в виде строк используется функция FORMAT. Для общих преобразований типов данных продолжайте использовать CAST и CONVERT.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQL

Синтаксис

FORMAT ( value, format [, culture ] )

Аргументы

  • value
    Выражение поддерживаемого типа данных для форматирования. Список допустимых типов см. в таблице в последующем разделе «Примечания».

  • format
    Шаблон формата nvarchar.

    Аргумент format должен содержать допустимую строку формата .NET Framework в виде стандартной строки формата (например, «C» или «D») либо в виде шаблона пользовательских символов, обозначающих даты и числовые значения (например, «ММММ ДД, гггг (дддд)»). Составное форматирование не поддерживается. Полные сведения об этих шаблонах форматирования приведены в разделах документации по .NET Framework, посвященных форматированию строк в целом, пользовательским форматам даты и времени, а также пользовательским форматам чисел. Хорошей отправной точкой является раздел «Типы форматирования».

  • culture
    Дополнительный аргумент nvarchar, обозначающий язык и региональные параметры.

    Если аргумент culture не указан, то используется язык текущего сеанса. Язык может быть задан неявно или явно с помощью инструкции SET LANGUAGE. culture принимает любой язык и региональные параметры, поддерживаемые .NET Framework в качестве аргумента. Его применение не ограничивается языками, явно поддерживаемыми службами SQL Server. Если аргумент culture недопустим, то FORMAT выдаст ошибку.

Возвращаемые типы данных

Значение NULL или nvarchar

Длина возвращаемого значения определяется аргументом format.

Замечания

Функция FORMAT возвращает значение NULL для ошибок, когда culture не является valid. Например, возвращается NULL, если значение, заданное в format, недопустимо.

Функция FORMAT предполагает наличие среды выполнения CLR платформы .NET Framework.

Данная функция не будет работать удаленно, поскольку возможность ее работы зависит от наличия среды CLR. Удаленный вызов функции, требующей наличия среды CLR, приведет к ошибке на удаленном сервере.

В следующей таблице перечислены приемлемые типы данных для аргумента value, в ней также содержатся сведения об их сопоставлении с эквивалентными типами .NET Framework.

Категория

Тип

Тип .NET

Числовой

bigint

Int64

Числовой

int

Int32

Числовой

smallint

Int16

Числовой

tinyint

Byte

Числовой

decimal

SqlDecimal

Числовой

numeric

SqlDecimal

Числовой

float

Double

Числовой

real

Single

Числовой

smallmoney

Decimal

Числовой

money

Decimal

Дата и время

дата

DateTime

Дата и время

time

TimeSpan

Дата и время

datetime

DateTime

Дата и время

smalldatetime

DateTime

Дата и время

datetime2

DateTime

Дата и время

datetimeoffset

DateTimeOffset

Примеры

А. Простой пример функции FORMAT

В следующем примере возвращается простой набор данных, отформатированный для различных языков и региональных параметров.

DECLARE @d DATETIME = '10/01/2011';
SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result'
      ,FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result'
      ,FORMAT ( @d, 'd', 'de-de' ) AS 'German Result'
      ,FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result'; 
  
SELECT FORMAT ( @d, 'D', 'en-US' ) AS 'US English Result'
      ,FORMAT ( @d, 'D', 'en-gb' ) AS 'Great Britain English Result'
      ,FORMAT ( @d, 'D', 'de-de' ) AS 'German Result'
      ,FORMAT ( @d, 'D', 'zh-cn' ) AS 'Chinese (Simplified PRC) Result'; 

Ниже приводится результирующий набор.

US English Result Great Britain English Result  German Result Simplified Chinese (PRC) Result
----------------  ----------------------------- ------------- -------------------------------------
10/1/2011         01/10/2011                    01.10.2011    2011/10/1

(1 row(s) affected)

US English Result            Great Britain English Result  German Result                    Chinese (Simplified PRC) Result
---------------------------- ----------------------------- -----------------------------  ---------------------------------------
Saturday, October 01, 2011   01 October 2011               Samstag, 1. Oktober 2011        2011年10月1日

(1 row(s) affected)

Б. Функция FORMAT с пользовательскими строками форматирования

В следующем примере показано форматирование числовых значений с помощью заданного пользовательского формата. Дополнительные сведения об этих и других пользовательских форматах см. в разделе Пользовательские строки форматирования чисел.

-- Current date is September 27 2012.
DECLARE @d DATETIME = GETDATE();
SELECT FORMAT( @d, 'dd/MM/yyyy', 'en-US' ) AS 'DateTime Result'
       ,FORMAT(123456789,'###-##-####') AS 'Custom Number Result';

Ниже приводится результирующий набор.

DateTime Result  Custom Number Result
--------------   --------------------
27/09/2012       123-45-6789

(1 row(s) affected)

В. Функция FORMAT с числовыми типами

В следующем примере возвращаются 5 строк из таблицы Sales.CurrencyRate. Столбец EndOfDateRate в таблице хранится как тип money. В этом примере столбец возвращается неформатированным, затем форматируется в формате .NET Number, формате типа General и Currency. Дополнительные сведения об этих и других численных форматах см. в разделе Стандартные строки форматирования чисел.

USE AdventureWorks2012;
GO
SELECT TOP(5)CurrencyRateID, EndOfDayRate
            ,FORMAT(EndOfDayRate, 'N', 'en-us') AS 'Number Format'
            ,FORMAT(EndOfDayRate, 'G', 'en-us') AS 'General Format'
            ,FORMAT(EndOfDayRate, 'C', 'en-us') 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

(5 row(s) affected)

Этот пример задает немецкий язык и региональные параметры (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 €

 (5 row(s) affected)

См. также

Справочник

Функции CAST и CONVERT (Transact-SQL)