SQL Serverでは、 FORMAT()
関数を使用すると、2番目の引数として「フォーマット文字列」を渡すことにより、日付/時刻と数値をフォーマットされた文字列としてフォーマットできます(最初の引数はフォーマットされる値です)。
この関数の動作例を次に示します。
FORMAT(@date, 'dd/MM/yyyy');
この場合、フォーマット文字列は dd / MM / yyyy 。
この特定のフォーマット文字列は、 @date
を指定します 値は、2桁の日、2桁の月、4桁の年の順に、スラッシュを区切り文字として使用してフォーマットする必要があります。
これにより、次のようになります。
21/05/2019
フォーマット文字列 1つ以上の事前定義されたフォーマット指定子を含む文字列です 、これは、出力のフォーマット方法を定義する単一の文字または文字のグループです。
SQL Serverは、.NETFrameworkでサポートされているフォーマット文字列のみを受け入れます。
フォーマット文字列は、標準フォーマット文字列またはカスタムフォーマット文字列にすることができます。これらの仕組みは次のとおりです。
- 標準形式の文字列 事前定義されたフォーマット文字列です。これには、特定の事前定義された形式を表すものとして解釈される単一の形式指定子が含まれています。標準形式の文字列は、実際にはカスタム形式の文字列のエイリアスです。ただし、実際に使用されるカスタム形式の文字列は、多くの場合、文化によって異なります。
- カスタム形式の文字列 一方、1つ以上のカスタム形式指定子で構成され、互いに組み合わせて形式を定義します。これにより、出力の外観をより柔軟に定義できます。
例1-標準形式の文字列
これは、標準形式の文字列がどのように機能するかを示す例です。
SELECT FORMAT(1234, 'C') AS Result;
結果:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
この例では、 C
フォーマット文字列です。この場合、これは単一のフォーマット指定子で構成される標準の数値フォーマット文字列です。この特定のフォーマット指定子は、通貨額を表すために使用されます。
カスタムの数値形式の文字列を使用しても、同じ結果を得ることができます。
例2–カスタムフォーマット文字列
この例では、前の例と同じ出力が生成されます。違いは、この例では、カスタムを使用していることです。 標準の文字列の代わりに文字列をフォーマットします。
SELECT FORMAT(1234, '$#,###.00') AS Result;
結果:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
カスタムフォーマット文字列 独自のカスタムフォーマットを作成できます。文字列をフォーマット指定子と組み合わせて、独自のカスタムフォーマットを作成できます。
この例では、#
を使用します 数字のプレースホルダーであるフォーマット指定子。数字が存在しない場合、結果の文字列に数字は表示されません。
0
も使用しています フォーマット指定子。これは、任意の数字のプレースホルダーでもあります。ただし、この場合、数字が存在しない場合は、代わりにゼロが使用されます。
$
も含めます 、、コード> 、および
。
フォーマット文字列のリテラル文字列。これらはそのまま出力に含まれます。
入力数を減らすと、 0
間で結果がどのように異なるかがわかります。 および#
フォーマット指定子、およびそれらが C
とどのように比較されるか 前の例の標準フォーマット指定子:
SELECT FORMAT(34, 'C') AS 'C', FORMAT(34, '$0,000.00') AS '0', FORMAT(34, '$#,###.00') AS '#';
結果:
+--------+-----------+--------+ | C | 0 | # | |--------+-----------+--------| | $34.00 | $0,034.00 | $34.00 | +--------+-----------+--------+
ご想像のとおり、カスタム形式の文字列は、標準形式の文字列よりもはるかに柔軟性があります。
ただし、特にカルチャを考慮した動的な結果を生成する場合は、標準形式の文字列がより強力になる可能性がある多くのシナリオがあります。文化についてはもうすぐ。
例3–日付と時刻のフォーマット
日付/時刻の値は、標準またはカスタム形式の文字列の選択も提供します。これは、標準形式の文字列といくつかのカスタム形式の文字列でフォーマットされている日付/時刻の値の例です。
DECLARE @date datetime2(7); SET @date = '2080-05-01 23:09:08.1234567'; SELECT FORMAT(@date, 'd') AS 'd', FORMAT(@date, 'M/d/yyyy') AS 'M/d/yyyy', FORMAT(@date, 'dd/MM/yy') AS 'dd/MM/yy', FORMAT(@date, 'ddd, MMM dd, yy') AS 'ddd, MMM dd, yy', FORMAT(@date, 'dddd, dd MMMM yyyy') AS 'dddd, dd MMMM yyyy';
結果:
+----------+------------+------------+-------------------+------------------------+ | d | M/d/yyyy | dd/MM/yy | ddd, MMM dd, yy | dddd, dd MMMM yyyy | |----------+------------+------------+-------------------+------------------------| | 5/1/2080 | 5/1/2080 | 01/05/80 | Wed, May 01, 80 | Wednesday, 01 May 2080 | +----------+------------+------------+-------------------+------------------------+
最初の1つは標準形式の文字列を使用し、他の4つはカスタム形式の文字列を使用します。
使用可能な日付と時刻の形式の文字列の完全なリストについては、以下を参照してください。
- 標準の日付/時刻形式の文字列のリスト
- カスタムの日付/時刻形式の文字列のリスト
例4–文化
フォーマット文字列の結果は、使用されているカルチャによって異なる場合があります。たとえば、米国では短い日付形式は「M / d / yyyy」として表されますが、英国では「dd / MM/yyyy」として表されます。
デフォルトでは、現在のセッションの言語がカルチャの定義に使用されます。ただし、 FORMAT()
関数を使用すると、これをオーバーライドできます。
関数の構文は次のようになります:
FORMAT ( value, format [, culture ] )
したがって、オプションの引数としてカルチャを指定できます。
これは、文化が異なれば、単一のフォーマット文字列が多数の異なるフォーマットを生成する可能性がある例です。
DECLARE @date datetime2(7); SET @date = '2080-05-01 23:09:08.1234567'; SELECT FORMAT(@date, 'd', 'en-us') AS 'US English', FORMAT(@date, 'd', 'en-gb') AS 'British', FORMAT(@date, 'd', 'de-de') AS 'German', FORMAT(@date, 'd', 'jp-jp') AS 'Japanese';
結果:
+--------------+------------+------------+------------+ | US English | British | German | Japanese | |--------------+------------+------------+------------| | 5/1/2080 | 01/05/2080 | 01.05.2080 | 05/01/2080 | +--------------+------------+------------+------------+
この場合、4か国すべてが d
を使用します 標準の日付と時刻の形式の文字列。ただし、それらはすべて異なる文化の議論を使用しています。これにより、文化ごとに異なる結果が得られます。
そしてそれは標準だけではありません 文化の影響を受けるフォーマット文字列。文化もカスタムの結果に影響を与える可能性があります 文字列をフォーマットします。次に例を示します:
DECLARE @date datetime2(7); SET @date = '2080-05-01 23:09:08.1234567'; SELECT FORMAT(@date, 'dddd, dd MMMM', 'en-us') AS 'US English', FORMAT(@date, 'dddd, dd MMMM', 'de-de') AS 'German', FORMAT(@date, 'dddd, dd MMMM', 'vi') AS 'Vietnamese', FORMAT(@date, 'dddd, dd MMMM', 'sv') AS 'Swedish';
結果:
+-------------------+------------------+----------------------+----------------+ | US English | German | Vietnamese | Swedish | |-------------------+------------------+----------------------+----------------| | Wednesday, 01 May | Mittwoch, 01 Mai | Thứ Tư, 01 Tháng Năm | onsdag, 01 maj | +-------------------+------------------+----------------------+----------------+
不変のカルチャを使用するオプションもあります( iv
)。不変の文化は文化に影響されません。英語に関連付けられていますが、国や地域には関連付けられていません。詳細と例については、SQL ServerでFORMAT()を使用するときに不変カルチャを指定する方法を参照してください。