勉強したことのメモ

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でカラム内容によって条件分岐させたい場合の対応方法

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

MySQLでグループ化したものを条件で絞る(HAVING)

正規化したテーブルがあってその中には idとtagのカラムがある。 でtagの方 ...

MySQLで経度緯度から半径○Kmのデータを抽出する方法

経度と緯度をtext型として格納しているMySQLのテーブルがあり、指定した経度 ...

MySQLでパターンマッチの逆

LIKE検索の逆ってなったのでメモ。 NOT LIKE '%あああ%' が正解み ...

MySQLでLIKE検索時に大文字・小文字・半角・全角全て区別したい

以前にMySQLであいまい検索時に大文字小文字は区別しないが、それ以外は全て区別 ...