MySQLで数値をカンマ入りの文字列にフォーマットする方法

こんにちは、さるまりんです。

以前、PostgreSQLで数値をカンマ入りフォーマットの文字列にする方法を書きました。
今回はMySQLで同様のことをしてみます。

MySQLではFORMAT()関数を使います。

FORMAT(数値, 小数点桁数)

23980をカンマ入りの23,980にします。

FORMAT(23980, 0)

実際にやってみます。

mysql> SELECT FORMAT(23980, 0);
+------------------+
| FORMAT(23980, 0) |
+------------------+
| 23,980           |
+------------------+
1 row in set (0.00 sec)

もっと大きな数字でやってみます。

mysql> SELECT FORMAT(1234567890, 0);
+-----------------------+
| FORMAT(1234567890, 0) |
+-----------------------+
| 1,234,567,890         |
+-----------------------+
1 row in set (0.00 sec)

PostgreSQLの時のように書式を渡しているわけではなく、大きな数字でもうまくフォーマットしてくれています。

小数点以下を指定してみます。

mysql> SELECT FORMAT(75.234, 2);
+-------------------+
| FORMAT(75.234, 2) |
+-------------------+
| 75.23             |
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT FORMAT(75.236, 2);
+-------------------+
| FORMAT(75.236, 2) |
+-------------------+
| 75.24             |
+-------------------+
1 row in set (0.00 sec)

小数点以下の桁数に2を指定していますので、そこで丸めてくれています。

ちなみにFORMAT()関数は3つ目の引数としてロケールをとります。

FORMAT(数値, 小数点桁数[,ロケール])

ロケールによってカンマ以外を使う例を見てみます。

例えばドイツはピリオドを使います。

mysql> SELECT FORMAT(123456789, 2, 'de_DE');
+-------------------------------+
| FORMAT(123456789, 2, 'de_DE') |
+-------------------------------+
| 123.456.789,00                |
+-------------------------------+
1 row in set (0.00 sec)

フランスはスペースを使います。

mysql> SELECT FORMAT(123456789, 2, 'fr_FR');
+-------------------------------+
| FORMAT(123456789, 2, 'fr_FR') |
+-------------------------------+
| 123456789,00                  |
+-------------------------------+
1 row in set (0.00 sec)

スペース飛ばされています?

ただデータを抽出する必要があるときなどはSQLをパパッと書いてそれを実行するだけで書式を指定できると便利です。もっとややこしいプログラムの場合はデータベースからは数値を取り出して、表示に関する処理の箇所で各言語の機能を使って書式を指定するのがいいのかもしれないです。

場合によって適切に方法を選んでいけるようにいろんなことを勉強したいと思います。

読んでくださってありがとうございました。

それではまた!