【MySQL】クエリの結果をcsv形式でファイルに保存する

【MySQL】クエリの結果をcsv形式でファイルに保存する

MySQLでクエリを実行し、その結果をそのままcsv形式でファイルに保存するコマンドの紹介記事です!

コマンド


mysql --user=user名 -p table名 -e "SQL文" | sed -e 's/\t/,/g' > xxx.csv

解説


mysql --user=user名 -p table名 -e "SQL文"

と入力するとSQLの実行結果が出力されるため、パイプ |で出力結果をsedコマンドを利用して整形します。


sed -e 's/¥t/,/g'

-e オプションを使用することでスクリプトを指定して文字列の置換を行います。

s/ で正規表現で置換処理を開始し、 /g で、見つけたパターンすべてを置換します。
¥t/, は、タブ文字を,で置換することを指定しています。

置換した結果をファイルに保存するため、ファイル名を指定してリダイレクト >をしています。

以下のようなテーブルがあるとき


mysql> select * from user;
+------+--------+------------+
| id   | name   | created_at |
+------+--------+------------+
|    1 | Bob    | 2021-10-20 |
|    2 | Alice  | 2021-10-20 |
|    3 | Chrome | 2021-10-01 |
+------+--------+------------+
3 rows in set (0.00 sec)

コマンドを実行します。(user名とtable名は環境に合わせて変更してください)


mysql --user=docker -p test_database -e "select * from user;" | sed -e 's/\t/,/g' > output.csv

以下のようにcsvファイルに出力されます。


$ cat output.csv
id,name,created_at
1,Bob,2021-10-20
2,Alice,2021-10-20
3,Chrome,2021-10-01
MySQL