コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

MySQLの出力結果を効率良くExcel(もしくはスプレッドシート)に貼るテクニック

MySQLの出力結果を非エンジニアに渡すときなどはExcelなどにはると思うのですがそういうときの話。

意外と知らない人は知らないのでメモがてら。

結論

MySQLの出力結果をテキストエディタなどに貼り付けて |\t (タブ文字)に変換する。

原理解説

Excel(もしくはスプレッドシート)は以下の性質を持っている

  • tabで区切られたものを貼り付けるとtabごとに隣接する列のセルにデータが貼り付けられる
  • 改行すると次の行に貼り付けられる

この性質があるため、列の区切りをタブに変換するとすんなり貼れる。

users テーブルの最新10件の作成日と更新日をスプレッドシートで欲しい』みたいなとき

mysql> SELECT id,created_at,updated_at FROM users order by ID DESC LIMIT 10;
+-----+---------------------+---------------------+
| id  | created_at          | updated_at          |
+-----+---------------------+---------------------+
| 233 | 2017-12-18 03:19:23 | 2017-12-18 03:19:23 |
| 232 | 2017-12-18 03:18:45 | 2017-12-18 03:19:05 |
| 231 | 2017-12-18 02:01:15 | 2017-12-18 02:01:49 |
| 230 | 2017-11-29 08:38:25 | 2017-11-29 08:42:56 |
| 229 | 2017-10-06 05:52:32 | 2018-04-24 12:37:47 |
| 228 | 2017-10-03 03:56:23 | 2017-10-03 03:58:22 |
| 227 | 2017-10-03 03:52:20 | 2017-10-03 03:52:20 |
| 226 | 2017-10-02 04:02:05 | 2017-10-03 04:04:57 |
| 225 | 2017-09-28 09:24:02 | 2017-09-28 09:24:48 |
| 224 | 2017-09-25 23:06:23 | 2017-09-25 23:09:28 |
+-----+---------------------+---------------------+
10 rows in set (0.00 sec)

こんなデータがあるとしたときに、|\t に変換する

  233     2017-12-18 03:19:23     2017-12-18 03:19:23    
     232     2017-12-18 03:18:45     2017-12-18 03:19:05    
     231     2017-12-18 02:01:15     2017-12-18 02:01:49    
     230     2017-11-29 08:38:25     2017-11-29 08:42:56    
     229     2017-10-06 05:52:32     2018-04-24 12:37:47    
     228     2017-10-03 03:56:23     2017-10-03 03:58:22    
     227     2017-10-03 03:52:20     2017-10-03 03:52:20    
     226     2017-10-02 04:02:05     2017-10-03 04:04:57    
     225     2017-09-28 09:24:02     2017-09-28 09:24:48    
     224     2017-09-25 23:06:23     2017-09-25 23:09:28    

これを貼り付けるといい感じに並んでくれる f:id:shinkufencer:20180519231757p:plain

あとは体裁を整えて完成

f:id:shinkufencer:20180519231801p:plain