SQL SERVER - 数値を文字列に変換する
数値をフォーマットされた文字列に変換する
レポートに表示したりする際など、数値型のデータを SQL Server 側でフォーマットされた文字列に変換したい時ありますよね。
ここではよく使う、数値を文字列に変換する T-SQL のサンプルクエリーを書いておきます。
FORMAT を使って日付をフォーマットして文字列に変換する
数値を文字列に変換するには、SQL Server 2012 から使える FORMAT 関数使うのが簡単で便利です。
シンタックスは FORMAT ( value, format [, culture ] ) で、 数値を変換する場合には value に数値を指定します。
format には、スタンダードフォーマット文字列やカスタムフォーマット文字列を指定することができます。
スタンダードフォーマット文字列には、F: 固定小数点、N: 桁区切り記号つき、C: 通貨などがあり、続けて小数点以下の桁数を 0 ~ 99 までの数字で指定できます。
カスタムフォーマット文字列には、「0: その桁に数字があればその数字が、なければ 0 が表示される」「#: その桁に数字があればその数字が、なければ表示されない」 など、いろいろあります。
どちらで指定しても、元の数値の小数点以下の数字が指定した桁数より多い場合、値は四捨五入されます。
culture の引数は、通貨などカルチャーによって変換の結果が変わってくる時に、カルチャーを指定して変換するのに使われます。
数値を文字列に変換する T-SQL のサンプルクエリー
よく使われる、FORMAT を使った数値を文字列に変換するクエリーは以下の通りです。
SELECT 'N' AS FormatString, FORMAT(156256.799, 'N') AS StringValue UNION ALL -- 156,256.80 SELECT 'N0', FORMAT(156256.799, 'N0') UNION ALL -- 156,257 SELECT 'N1', FORMAT(156256.799, 'N1') UNION ALL -- 156,256.8 SELECT 'N2', FORMAT(156256.799, 'N2') UNION ALL -- 156,256.80 SELECT 'F', FORMAT(156256.799, 'F') UNION ALL -- 156256.80 SELECT 'F0', FORMAT(156256.799, 'F0') UNION ALL -- 156257 SELECT 'F1', FORMAT(156256.799, 'F1') UNION ALL -- 156256.8 SELECT 'F2', FORMAT(156256.799, 'F2') UNION ALL -- 156256.80 SELECT 'C: en-US', FORMAT(156256.799, 'C', 'en-US') UNION ALL -- $156,256.80 SELECT 'C: ja-JP', FORMAT(156256.799, 'C', 'ja-JP') UNION ALL -- ¥156,257 SELECT '0', FORMAT(156256.799, '0') UNION ALL --156257 SELECT '0.00', FORMAT(156256.799, '0.00') UNION ALL --156256.80 SELECT '#.##', FORMAT(156256.799, '#.##') UNION ALL --156256.8 SELECT '#,0.00', FORMAT(156256.799, '#,0.00'); -- 156,256.80
スタンダードフォーマット文字列の F、N は小数点以下の数字の指定をしないと、デフォルトは 2 になります。
先ほども書きましたが、値は四捨五入されます。 切り上げ・切り捨てしないといけない時は、以下の記事を参考に切り上げ・切り捨てを行ってから、文字列に変換してくださいね。