T-SQL: 金額(MONEY 型)を通貨記号(円マーク)付きにフォーマットされた文字列に変換する
MONEY 型をフォーマットされた文字列に変換するには?
SQL Server の MONEY 型のカラムには数字のみが保存されています。
その MONEY 型のデータを取得する際に、円マークやドルマークなどの通貨記号をつけたり、カンマを入れてフォーマットされた文字列に変換する方法を書きとめておきます。
金額(MONEY 型)を通貨記号(円マーク)付きにフォーマット
FORMAT 関数を使う
SQL Server 2012 以降であれば FORMAT 関数を使って、通貨記号付きの文字列に変換することができます。
FORMAT 関数の構文は次の通りです。
FORMAT ( 変換したい値, フォーマット [, カルチャ ] )
今回は金額を変換したいので、変換したい値 には MONEY 型の値 を、フォーマット には 'C' を設定します。
カルチャ引数はオプションで、省略すると現在のセッションの言語の通貨が使われます。
また、カルチャ引数には NET Framework でサポートされているものが設定可能で、あまり使うことはないかもしれませんが SQL Server でサポートされていない言語も設定できます。
例えば、MONEY 型の値を通貨記号付きで、カンマをつけた文字列に変換するクエリーは次の通りです。
DECLARE @Price MONEY = 2989; SELECT FORMAT (@Price, 'C', 'ja-JP') AS PriceJP, -- 円 FORMAT (@Price, 'C', 'en-US') AS PriceEN, -- USドル FORMAT (@Price, 'C', 'fr-FR') AS PriceFR; -- ユーロ
[実行結果]
カルチャは ja-JP が日本(日本円)、en-US がアメリカ(US ドル)、fr-FR がフランス(ユーロ) です。
CONVERT 関数を使う
SQL Server 2012 より前のバージョンでは FORMAT 関数がないので、CONVERT 関数を使って、コンマをいれ、通貨記号を自分で加えます。
CONVERT 関数の構文は次の通りです。
CONVERT ( 変換後のデータ型 [ ( 長さ ) ] , 変換するデータ [ , スタイル ] )
今回は金額を文字列に変換したいので、変換後のデータ型 には NVARCHAR を指定します。
長さ は省略すると 30 で、今回は MONEY 型は最大 25 桁程度なので、省略しても大丈夫です。
スタイル は 変換するデータ のデータ型によって設定できる値が違います。 今回は MONEY 型なので、次のような値が指定できます。
- 0: 3 桁ごとのコンマなしで小数点以下 2 桁 (デフォルト)
- 1: 3 桁ごとのコンマありで小数点以下 2 桁
- 2: 3 桁ごとのコンマなしで小数点以下 4 桁
今回はコンマを入れたいので 1 を指定します。
先程の FORMAT 関数と同じ結果を CONVERT 関数を使って取得するクエリーは次の通りです。
DECLARE @Price MONEY = 2989; SELECT '¥' + LEFT(CONVERT(NVARCHAR, @Price, 1), LEN(CONVERT(NVARCHAR, @Price, 1)) - 3) AS PriceJP, -- 円 '$' + CONVERT(NVARCHAR, @Price, 1) AS PriceEN, -- USドル CONVERT(NVARCHAR, @Price, 1) + ' €' AS PriceFR; -- ユーロ
[実行結果]
通貨記号は自動的に入ってくれないので、必要に応じて右側か左側に追加します。
スタイルに 1 を設定すると、コンマは入りますが小数点以下 2 桁までの文字列になるので、日本円のような小数点以下がない通貨の場合は小数点と小数点以下の数字を取り除く必要があります。
取り除き方にはいろいろあると思いますが、今回は LEFT 関数を使って CONVERT の結果得られる文字列の右側 3 桁 (.00) を取り除きました。