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;

좋은 웹페이지 즐겨찾기