SQLServerでSQLを記述していると、金額などの数値データを金額表記(12,345)にしたい時があります。
取得したデータをプログラム側で書式指定してもいいのですが、SQLで処理した方がプログラムがシンプルになるので、int型などの数値を3桁ごとにカンマ「,」で区切った文字列表記に変換する方法を紹介します。
金額表記への変換方法
数値を3桁カンマ区切りの金額表記へ変換する方法は2つあります。
- CONVERT関数とREPLACE関数を使用する方法
- FORMAT関数を使用する方法
CONVERT関数とREPLACE関数を使用する方法
CONVERT関数とREPLACE関数を使用して数値を3桁ごとのカンマ区切り表記に変換する場合は、以下の順に処理を行います。
- CONVERT関数で数値型の値を金額型(MONEY型)に変換する
- CONVERT関数で金額型を3桁カンマ区切りの文字列型に変換する
- REPLACE関数で3桁カンマ区切りの文字列の小数以下の部分を削除する
「1.数値型の値を金額型(MONEY型)に変換する」については、もとの値が金額型であれば必要ありません。
上記の処理を順番に適用したSQLを以下に記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
-- 変換元の数値 DECLARE @INT_VALUE INT = 123456789; -- 1. CONVERT関数で数値を金額型に変換 DECLARE @MONEY_VALUE MONEY; SET @MONEY_VALUE = CONVERT(MONEY, @INT_VALUE); SELECT @MONEY_VALUE; -- → 123456789.00 -- 2. CONVERT関数で金額型を文字列型に変換(データスタイルに1を指定) DECLARE @STRING_VALUE NVARCHAR(20); SET @STRING_VALUE = CONVERT(NVARCHAR, @MONEY_VALUE, 1); SELECT @STRING_VALUE; -- → 123,456,789.00 -- 3. REPLACE関数で末尾の「.00」を削除 DECLARE @RESULT_VALUE NVARCHAR(20); SET @RESULT_VALUE = REPLACE(@STRING_VALUE, '.00', ''); SELECT @RESULT_VALUE; -- → 123,456,789 |
「2. CONVERT関数で金額型を文字列型に変換」を行う際にCONVERT関数の第3引数にデータスタイルの「1」を指定することで、3桁ごとにカンマで区切られた文字列に変換できます。
3つの処理を1つにまとめたSQLは次のようになります。
1 2 3 4 5 6 7 |
-- 変換元の数値 DECLARE @INT_VALUE INT = 123456789; -- CONVERT関数とREPLACE関数で変換 -- 一旦MONEY型に変換して文字列に変換後に末尾の「.00」を削除 SELECT REPLACE(CONVERT(NVARCHAR, CONVERT(MONEY, @INT_VALUE), 1), '.00', ''); |
FORMAT関数を使用する方法
FORMAT関数を使用して書式を設定する方法は、CONVERT関数とREPLACE関数を使用する方法よりも簡単です。
FORMAT関数の第1引数に変換元の数値を指定し、第2引数に3桁カンマ区切りの書式を指定します。
FORMAT関数で数値を3桁ごとのカンマ区切りにするSQLは次のようになります。
1 2 3 4 5 6 |
-- 変換元の数値 DECLARE @INT_VALUE INT = 123456789; -- FORMAT関数で書式を設定 SELECT FORMAT(@INT_VALUE, '#,###'); |
FORMAT関数はSQL Server 2012以降でのみ使用可能なので、以前のバージョンのSQLServerではCONVERT関数とREPLACE関数を使用した方法で変換することになりますのでご注意ください。