LoginSignup
15
13

More than 5 years have passed since last update.

△△の一覧データください! と言われたときのワンライナー(リモートのMySQLでのSELECT実行結果をファイルに保存する)

Last updated at Posted at 2016-02-25

△△の一覧データください! とは

データベースから特定の条件でデータを抽出してファイルに保存し、それを何かしらの方法で渡すことを期待されている状況。
このとき、ファイルはExcelで開ける必要がある。

リモートのMySQLから特定の条件でデータを抽出してExcelで開ける形式のファイルに保存するワンライナー

mysql -u db_user -h db_host -p db_name -e "SELECT id, name FROM user WHERE age >= 30" | sed -e 's/\t/,/g' | iconv -f UTF8 -t SJIS > foo.csv

これを実行すると、パスワード入力後に
・データベースに接続し
・SQLを実行(この例だと30歳以上のユーザのidと名前の一覧を抽出)し
・整形して
・foo.csvに保存する。

データベース接続

データベース接続時にユーザ名、ホスト名、データベース名、を指定する。また、-eオプション(execute)で続けて指定するSQL構文を実行して終了を指定できる。

SQLを実行

-eオプションにより、ステートメントを実行して終了が指定されている。
実行結果は、カラム区切り文字としてタブを使用し、各行が新しい行に出力される。

整形

整形は、
1, タブ区切りをカンマ区切りとして、CSV形式に変更する
2, 文字コードをSHIFT-JISに変換する
の2つを行う。
sed -e 's/\t/,/g'
で、タブ区切りをカンマ区切りに置換する。
その結果を
iconv -f UTF8 -t SJIS
でUTF-8からSHIFT-JISに変換をかける。
これらは、保存したファイルがExcelで開けるようにするために行っている。

CSVならば渡した相手がファイルをダブルクリックすればExcelで閲覧できる&
Excelでは、テキストファイルはSHIFT-JISでないと開けないため。

保存

結果のテキストをリダイレクションを利用してファイルに書き込む。

参考にさせていただいたページ

MySQLリモートDBの結果をローカルCSVファイルに出力する方法

15
13
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
13