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)