FORMAT (Transact-SQL)
傳回以 SQL Server 2012 中指定的格式與選用文化特性格式化的值。將 FORMAT 函數用於將日期/時間與數值視為字串的地區設定感知格式化作業。針對一般資料類型轉換,請使用 CAST 或 CONVERT。
語法
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 會針對不是 valid 的 culture 以外的錯誤傳回 NULL。例如,如果 format 中指定的值無效,則會傳回 NULL。
FORMAT 必須仰賴既存的 .NET Framework Common Language Runtime (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 |
日期與時間 |
時間 |
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
下列範例會從 Sales.CurrencyRate 資料表傳回 5 個資料列。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)