勉強したことのメモ

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 データベース

  関連記事

adminerでMySQLに接続しようとするとエラーになる場合の対応方法

新しく構築したサーバにadminerを入れて接続しようとすると、「mysqlnd ...

MySQLで開始から終了日付内を調べたいとき

等号不等号でもできるけど、BETWEENというのがよさそう。 ■参考サイト ht ...

ON DUPLICATE KEY UPDATE後にinsert_idを取得すると結果が0になる

MySQLでON DUPLICATE KEY UPDATE句指定し、データの登録 ...

htmlspecialcharsを通してMySQLに格納したものを元に戻して出力

MySQLにHTMLタグを入れたくない場合にhtmlspecialcharsを使 ...

Codeigniter4でMySQLに接続しCRUD操作する方法

Codeigniter4.4.4でMySQLに接続しCRUD操作したい。また、任 ...