FORMAT (Transact-SQL)FORMAT (Transact-SQL)

適用対象: ○SQL Server (2012 以降) ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2012) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

SQL Server 2017SQL Server 2017 で、指定した形式とオプションのカルチャを使用して書式設定された値を返します。Returns a value formatted with the specified format and optional culture in SQL Server 2017SQL Server 2017. 文字列としての日付/時刻と数値のロケール依存の書式指定には FORMAT 関数を使用します。Use the FORMAT function for locale-aware formatting of date/time and number values as strings. 一般的なデータ型変換では、引き続き CAST または CONVERT を使用します。For general data type conversions, use CAST or CONVERT.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

FORMAT ( value, format [, culture ] )  

引数Arguments

valuevalue
書式設定がサポートされているデータ型の式。Expression of a supported data type to format. 有効な型の一覧については、以下の「解説」のセクションにある表を参照してください。For a list of valid types, see the table in the following Remarks section.

formatformat
nvarchar 書式パターン。nvarchar format pattern.

format 引数には、有効な .NET Framework 形式文字列を、標準形式文字列 ("C" や "D" など) として、または日付と数値に対するカスタム文字のパターン ("MMMM DD, yyyy (dddd)" など) として含める必要があります。The format argument must contain a valid .NET Framework format string, either as a standard format string (for example, "C" or "D"), or as a pattern of custom characters for dates and numeric values (for example, "MMMM DD, yyyy (dddd)"). 複合書式設定はサポートされていません。Composite formatting is not supported. これらの書式設定パターンの詳細については、一般的な文字列の書式設定、カスタム日付/時刻書式、およびカスタム数値書式に関する .NET Framework ドキュメントを参照してください。For a full explanation of these formatting patterns, consult the .NET Framework documentation on string formatting in general, custom date and time formats, and custom number formats. 最初にトピック「型の書式設定」を参照することをお勧めします。A good starting point is the topic, "Formatting Types."

cultureculture
カルチャを指定する省略可能な nvarchar 引数です。Optional nvarchar argument specifying a culture.

culture 引数が指定されていない場合は、現在のセッションの言語が使用されます。If the culture argument is not provided, the language of the current session is used. この言語は、SET LANGUAGE ステートメントを使用して、暗黙的または明示的に設定されます。This language is set either implicitly, or explicitly by using the SET LANGUAGE statement. culture は、引数として .NET Framework でサポートされている任意のカルチャを受け入れます。SQL ServerSQL Server で明示的にサポートされている言語に制限されません。culture accepts any culture supported by the .NET Framework as an argument; it is not limited to the languages explicitly supported by SQL ServerSQL Server. culture 引数が有効でない場合は、FORMAT でエラーが発生します。If the culture argument is not valid, FORMAT raises an error.

戻り値の型Return Types

nvarchar または nullnvarchar or null

戻り値の長さは format によって決まります。The length of the return value is determined by the format.

RemarksRemarks

valid でない culture 以外のエラーの場合、FORMAT は NULL を返します。FORMAT returns NULL for errors other than a culture that is not valid. たとえば、format に指定された値が無効な場合は NULL を返します。For example, NULL is returned if the value specified in format is not valid.

FORMAT 関数は非決定的です。The FORMAT function is nondeterministic.

FORMAT は、.NET Framework の共通言語ランタイム (CLR) の存在に依存しています。FORMAT relies on the presence of the .NET Framework Common Language Runtime (CLR).

この関数は、CLR の存在に依存するため、リモート処理を行うことはできません。This function cannot be remoted since it depends on the presence of the CLR. CLR が必要な関数をリモート処理すると、リモート サーバー上でエラーが発生する可能性があります。Remoting a function that requires the CLR, could cause an error on the remote server.

FORMAT は、コロンとピリオドをエスケープする必要がある CLR の書式規則に依存しています。FORMAT relies upon CLR formatting rules, which dictate that colons and periods must be escaped. そのため、書式設定文字列 (2 番目のパラメーター) にコロンまたはピリオドが含まれ、入力値 (最初のパラメーター) が time データ型の場合、コロンまたはピリオドを円記号でエスケープする必要があります。Therefore, when the format string (second parameter) contains a colon or period, the colon or period must be escaped with backslash when an input value (first parameter) is of the time data type. D. 時刻データ型を使用する FORMAT」を参照してください。See D. FORMAT with time data types.

value 引数の許容データ型の一覧を、.NET Framework にマッピングした同等の型と共に、次の表に示します。The following table lists the acceptable data types for the value argument together with their .NET Framework mapping equivalent types.

カテゴリCategory Type .NET の種類.NET type
数値Numeric BIGINTbigint Int64Int64
数値Numeric INTint Int32Int32
数値Numeric SMALLINTsmallint Int16Int16
数値Numeric TINYINTtinyint ByteByte
数値Numeric Decimaldecimal SqlDecimalSqlDecimal
数値Numeric NUMERICnumeric SqlDecimalSqlDecimal
数値Numeric FLOATfloat DoubleDouble
数値Numeric REALreal SingleSingle
数値Numeric SMALLMONEYsmallmoney DecimalDecimal
数値Numeric moneymoney DecimalDecimal
日時Date and Time datedate DateTimeDateTime
日時Date and Time timetime TimeSpanTimeSpan
日時Date and Time DATETIMEdatetime DateTimeDateTime
日時Date and Time smalldatetimesmalldatetime DateTimeDateTime
日時Date and Time datetime2datetime2 DateTimeDateTime
日時Date and Time datetimeoffsetdatetimeoffset DateTimeOffsetDateTimeOffset

使用例Examples

A.A. シンプルな FORMAT 例Simple FORMAT example

次の例では、さまざまなカルチャ用にフォーマットされたシンプルな日付を返します。The following example returns a simple date formatted for different cultures.

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';  

以下に結果セットを示します。Here is the result set.

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.B. カスタムの書式指定文字列を使用する FORMATFORMAT with custom formatting strings

次の例では、カスタム書式を指定して数値を書式設定する方法を示します。The following example shows formatting numeric values by specifying a custom format. この例では、現在の日付が 2012 年 9 月 27 日であることを前提としています。The example assumes that the current date is September 27, 2012. これらのカスタム書式およびその他のカスタム書式の詳細については、「カスタム数値書式設定文字列」を参照してください。For more information about these and other custom formats, see Custom Numeric Format Strings.

DECLARE @d DATETIME = GETDATE();  
SELECT FORMAT( @d, 'dd/MM/yyyy', 'en-US' ) AS 'DateTime Result'  
       ,FORMAT(123456789,'###-##-####') AS 'Custom Number Result';  

以下に結果セットを示します。Here is the result set.

DateTime Result  Custom Number Result  
--------------   --------------------  
27/09/2012       123-45-6789  
  
(1 row(s) affected)  

C.C. 数値型を使用する FORMATFORMAT with numeric types

次の例では、AdventureWorks2012AdventureWorks2012 データベースの Sales.CurrencyRate テーブルから 5 行を返します。The following example returns 5 rows from the Sales.CurrencyRate table in the AdventureWorks2012AdventureWorks2012 database. EndOfDateRate は、money 型としてテーブルに格納されます。The column EndOfDateRate is stored as type money in the table. この例では、書式設定されずに返された列を、.NET の数値書式、一般書式、および通貨の書式の種類を指定して書式設定します。In this example, the column is returned unformatted and then formatted by specifying the .NET Number format, General format, and Currency format types. これらの数値書式およびその他の数値書式の詳細については、「標準数値書式設定文字列」を参照してください。For more information about these and other numeric formats, see Standard Numeric Format Strings.

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;  

以下に結果セットを示します。Here is the result set.

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) を指定します。This example specifies the German culture (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)  

D.D. 時刻データ型を使用する FORMATFORMAT with time data types

.: がエスケープされていないため、FORMAT は NULL を返します。FORMAT returns NULL in these cases because . and : are not escaped.

SELECT FORMAT(cast('07:35' as time), N'hh.mm');   --> returns NULL  
SELECT FORMAT(cast('07:35' as time), N'hh:mm');   --> returns NULL  

.: はエスケープされているため、FORMAT から書式設定された文字列が返されます。Format returns a formatted string because the . and : are escaped.

SELECT FORMAT(cast('07:35' as time), N'hh\.mm');  --> returns 07.35  
SELECT FORMAT(cast('07:35' as time), N'hh\:mm');  --> returns 07:35  

FORMAT からは、AM または PM が指定され、書式設定された現在時刻が返されます。Format returns a formatted current time with AM or PM specified

SELECT FORMAT(SYSDATETIME(), N'hh:mm tt'); -- returns 03:46 PM
SELECT FORMAT(SYSDATETIME(), N'hh:mm t'); -- returns 03:46 P

FORMAT からは指定の時刻が AM で返されます。Format returns the specified time, displaying AM

select FORMAT(CAST('2018-01-01 01:00' AS datetime2), N'hh:mm tt') -- returns 01:00 AM
select FORMAT(CAST('2018-01-01 01:00' AS datetime2), N'hh:mm t')  -- returns 01:00 A

FORMAT からは指定の時刻が PM で返されます。Format returns the specified time, displaying PM

select FORMAT(CAST('2018-01-01 14:00' AS datetime2), N'hh:mm tt') -- returns 02:00 PM
select FORMAT(CAST('2018-01-01 14:00' AS datetime2), N'hh:mm t') -- returns 02:00 P

参照See Also

CAST および CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
STR (Transact-SQL)STR (Transact-SQL)
文字列関数 (Transact-SQL)String Functions (Transact-SQL)