勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

MySQLでSELECT時に数値を3桁ずつのカンマ区切りに変換する方法

  MySQL データベース

MySQLで商品価格のような数値の値を3桁ずつのカンマ区切りで取り出したいということがあった。いつもであれば普通に数値として取り出し、PHPのnumber_format関数でカンマ区切りにするんだけど、今回はMySQLのみで対応したかった。以下に対応方法をメモ。

 

テーブル情報

テーブル構造

mysql> SHOW COLUMNS FROM `test_table`;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int          | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | NO   |     | NULL    |                |
| price | int          | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+

データ内容

mysql> SELECT * FROM `test_table`;
+----+---------+---------+
| id | name    | price   |
+----+---------+---------+
|  1 | 商品A   |   10000 |
|  2 | 商品B   | 1000000 |
|  3 | 商品C   |     500 |
+----+---------+---------+

 

対応方法

SQL文

SELECT *, FORMAT(`price`, 0) AS format_price 
FROM `test_table`;

出力結果

mysql> SELECT *, FORMAT(`price`, 0) AS format_price 
    -> FROM `test_table`;
+----+---------+---------+--------------+
| id | name    | price   | format_price |
+----+---------+---------+--------------+
|  1 | 商品A   |   10000 | 10,000       |
|  2 | 商品B   | 1000000 | 1,000,000    |
|  3 | 商品C   |     500 | 500          |
+----+---------+---------+--------------+

 

FORMAT関数

使い方

  • 第1引数 → カンマ区切りにしたい数値
  • 第2引数 → 小数点以下桁数(0の場合は小数桁無し)
  • 第3引数 → ロケール(ja_JP等。ロケール自体の詳細はこちらを参照)

リファレンス

https://dev.mysql.com/doc/refman/8.0/ja/string-functions.html#function_format

 - MySQL データベース

  関連記事

MySQLにてSELECT時にdate型のカラムから干支(十二支)を計算し表示する方法

MySQLにdate型のカラムに誕生年月日が格納されており、そこから干支(十二支 ...

エックスサーバーでMySQLのサイズに注意

エックスサーバーで自動更新のログをMySQLに保存するようなシステムを動かしてい ...

MySQLでストアドプロシージャ戻り値対応版であるストアドファンクションの設定と利用方法

先日MySQLのストアドプロシージャに関するメモを書いたが、今回はストアドファン ...

MySQLでカラム内容によって条件分岐させたい場合の対応方法

MySQLでカラムの内容によって条件を分岐させたかった。またPHPで処理するので ...

MySQLでスレッドの実行状況を表示しスレッドの経過時間チェックや特定スレッドを強制終了する方法

データベースサーバが重たく、原因を調査する機会があった。サーバ自体のメモリやCP ...