FORMAT (Transact-SQL)

傳回以 SQL Server 2014 中指定的格式與選用文化特性格式化的值。 將 FORMAT 函數用於將日期/時間與數值視為字串的地區設定感知格式化作業。 針對一般資料類型轉換,請使用 CAST 或 CONVERT。

主題連結圖示 Transact-SQL 語法慣例

適用於:SQL Server (SQL Server 2012 透過目前版本)、Windows Azure SQL 資料庫 (初始版本,透過目前版本)。

語法

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

日期及時間

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 Number 格式、General 格式和 Currency 格式類型進行格式化。 如需有關這些和其他數值格式的詳細資訊,請參閱標準數值格式字串

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)

請參閱

參考

CAST 和 CONVERT (Transact-SQL)