FORMAT (Transact-SQL)

SQL Server 2012 で、指定した形式とオプションのカルチャを使用して書式設定された値を返します。文字列としての日付/時刻と数値のロケール依存の書式指定には FORMAT 関数を使用します。一般的なデータ型変換では、引き続き CAST または CONVERT を使用します。

トピック リンク アイコン Transact-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 によって決まります。

説明

valid でない culture 以外のエラーの場合、FORMAT は NULL を返します。たとえば、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

単一

数値

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

次の例では、Sales.CurrencyRate テーブルから 5 行を返します。列 EndOfDateRate は、money 型としてテーブルに格納されます。この例では、書式設定されずに返された列を、.NET の数値書式、一般書式、および通貨の書式の種類を指定して書式設定します。これらの数値書式およびその他の数値書式の詳細については、「標準数値書式設定文字列」を参照してください。

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-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)