FORMAT (Transact-SQL)
返回 SQL Server 2014 中以指定的格式和可选的区域性格式化的值。 使用 FORMAT 函数将日期/时间和数字值格式化为识别区域设置的字符串。 对于一般的数据类型转换,请使用 CAST 或 CONVERT。
适用范围:SQL Server(SQL Server 2012 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。 |
语法
FORMAT ( value, format [, culture ] )
参数
value
支持格式化的数据类型的表达式。 有关有效类型的列表,请参阅下面“备注”部分中的表。format
nvarchar 格式模式。format 参数必须包含一个有效的 .NET Framework 格式字符串,要么作为标准格式字符串(例如,“C”或“D”),要么作为日期值和数值的自定义字符模式(例如,“MMMM DD, yyyy (dddd)”)。 不支持组合格式。 有关这些格式模式的完整解释,请查阅有关常规字符串格式、自定义日期和时间格式以及自定义数字格式的 .NET Framework 文档。 一个好的起点是主题“格式类型”。
culture
指定区域性的可选 nvarchar 参数。如果未提供 culture 参数,则使用当前会话的语言。 可以使用 SET LANGUAGE 语句隐式或显式设置此语言。 culture 接受 .NET Framework 支持的任何区域性作为参数;它不局限于 SQL Server 显式支持的语言。 如果 culture 参数无效,FORMAT 将引发错误。
返回类型
nvarchar 或 null
返回值的长度由 format 确定。
注释
FORMAT 将返回 NULL 错误,而不是非 valid 的 culture。 例如,如果 format 中指定的值无效,则返回 NULL。
FORMAT 依赖于 .NET Framework 公共语言运行时 (CLR) 的存在。
此函数将不会进行远程处理,因为它依赖于 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 |
日期和时间 |
date |
DateTime |
日期和时间 |
time |
TimeSpan |
日期和时间 |
datetime |
DateTime |
日期和时间 |
smalldatetime |
DateTime |
日期和时间 |
datetime2 |
DateTime |
日期和时间 |
datetimeoffset |
DateTimeOffset |
示例
A.简单 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)
B.使用自定义格式字符串执行 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)
C.用于数值类型的 FORMAT
下面的示例返回 AdventureWorks2012 数据库的 Sales.CurrencyRate 表中的 5 个行。 EndOfDateRate 列在该表中作为 money 类型存储。 在本示例中,该列以非格式化形式返回,然后通过指定 .NET 数字格式、常规格式和货币格式类型进行格式化。 有关这些格式和其他数字格式的详细信息,请参阅标准数字格式字符串。
bSELECT 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)