忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

MySQL 数値を3桁ごとのカンマ区切り文字列に変換する方法について(FORMAT)

金額の数値データを表示する場合は、3桁ごとのカンマ編集で行うことが多いと思います。
この編集を行うために MySQL で数値を3桁ごとのカンマ区切り文字列に変換する方法として FORMAT 関数があります。
数値を '##,###,###.###' のような書式に変換し、小数点を丸めて、その結果を文字列として返します。
なお、 FORMAT 関数の説明は以下の通りです。

■[FORMAT関数]の説明

FORMAT(num, DP [, locale])
-- num : 指定数値
-- DP  : 小数点の丸め位置(0 の場合は小数以下を表示しない)
-- [locale] : 結果数の小数点、3 桁の区切り文字、および区切り文字間のグループ化に使用されるロケール
--            ロケールの指定が無ければ'en_US' です。


それでは順次、FORMAT 関数の使用例を示します。

■[FORMAT関数]の例

MariaDB [(none)]> SELECT
    ->     FORMAT(12345.123456, 4)
    ->    ,FORMAT(12345.12, 4)
    ->    ,FORMAT(12345.12, 0)
    ->    ,FORMAT(12345.12, 4, 'de_DE') AS 'ドイツ語:ドイツ指定'
    -> ;
+-------------------------+---------------------+---------------------+----------------------+
| FORMAT(12345.123456, 4) | FORMAT(12345.12, 4) | FORMAT(12345.12, 0) | ドイツ語:ドイツ指定 |
+-------------------------+---------------------+---------------------+----------------------+
| 12,345.1235             | 12,345.1200         | 12,345              | 12.345,1200          |
+-------------------------+---------------------+---------------------+----------------------+
1 row in set (0.00 sec)

最初の例では小数以下を4桁に丸めるために5桁の「5」を繰り上げいます。
また、2番目の例では小数点以下が4桁に満たないため、「0」で埋めて表示されます。
丸め位置を「0」に指定すると小数点以下が表示されません。

日本では3桁ごとの区切りを「,」(カンマ)で小数点を「.」(ピリオド)で表示しますが、 国によってはこれが逆になる場合があります。 (「de_DE」はドイツの場合を指定しています。)

ここで少し気になったので、最初の例の値をマイナスにしてみました。 結果を見ると「-12,345.1235」となり、絶対値の小数点5桁を四捨五入してその値にマイナスとしている様です。

MariaDB [(none)]> SELECT  FORMAT(-12345.123456, 4);
+--------------------------+
| FORMAT(-12345.123456, 4) |
+--------------------------+
| -12,345.1235             |
+--------------------------+
1 row in set (0.00 sec)


また、小数位置が「0」で小数点以下1位が「5」以上の場合はどうなるのでしょうか。
以下の結果から小数点以下1位が丸められます。

MariaDB [(none)]> SELECT
    ->     FORMAT(12345.5, 0)
    ->    ,FORMAT(-12345.5, 0);
+--------------------+---------------------+
| FORMAT(12345.5, 0) | FORMAT(-12345.5, 0) |
+--------------------+---------------------+
| 12,346             | -12,346             |
+--------------------+---------------------+
1 row in set (0.00 sec)











PR

コメント

コメントを書く