Re:dash の SQL で数値を SELECT したときのカンマを削除したい


株式会社オズビジョンのユッコ (@terra_yucco) です。

オズビジョンのハピタス事業部では、社内メンバがさっくり集計をしたり本番データを見るツールとして re:dash を使っています。こちらで本日、すごく簡単な改善対応を行ったことが喜ばれたので、Qiita に個人メモとして残しておきます。

前提

Re:dash は 2.0.0+b2990 (そろそろ化石...?)

Re:dash の SQL で数値を SELECT したときのカンマを削除したい

デフォルト?では Re:dash は数値型を表示するときに 3 ケタ単位でカンマを入れてきます。これが不要なケースで、カンマを取りたいときの対応方法になります。
Re:dash と併用している管理画面では、対象の数値にカンマを入れていないため、わざわざカンマを手で削除してからデータ突合を行ったりしていたらしいです...大変...。

この方法は SQL によってはパフォーマンス影響が出るケースがあるようなので、軽い SQL で必要な場合だけご利用ください。
Re:dash 側の設定で対応可能かもしれませんが、今のところ見つかってません。

結論

char にキャストする。

CAST(カラム名 AS char) AS カラム名

※最後の AS カラム名 を付けないと、表示されるカラム名が CAST(カラム名 AS CHAR) となってしまうので、社内にクエリで共有したりする場合には同名で命名し直したほうが無難です。

DB の構造

mysql> show create table daily_log;
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                                                                                                                                                                                                                                                                             |
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| daily_log | CREATE TABLE `daily_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `action` int(11) NOT NULL,
  `sys_ins_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `sys_upd_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> desc daily_log;
+--------------+-----------+------+-----+---------------------+-----------------------------+
| Field        | Type      | Null | Key | Default             | Extra                       |
+--------------+-----------+------+-----+---------------------+-----------------------------+
| id           | int(11)   | NO   | PRI | NULL                | auto_increment              |
| user_id      | int(11)   | NO   | MUL | NULL                |                             |
| action       | int(11)   | NO   |     | NULL                |                             |
| sys_ins_date | timestamp | NO   |     | 0000-00-00 00:00:00 |                             |
| sys_upd_date | timestamp | NO   |     | CURRENT_TIMESTAMP   | on update CURRENT_TIMESTAMP |
+--------------+-----------+------+-----+---------------------+-----------------------------+
5 rows in set (0.00 sec)

キャスト無し

SELECT user_id, action, sys_ins_date, sys_upd_date
  FROM daily_log
 ORDER BY id DESC
 LIMIT 1;

キャスト有り

SELECT CAST(user_id AS char) AS user_id, action, sys_ins_date, sys_upd_date
  FROM daily_log
 ORDER BY id DESC
 LIMIT 1;