2023年11月15日水曜日

MySQL で csv 出力する方法

MySQL で csv 出力する方法

概要

into outfile はいろいろと面倒なので into outfile を使わずに csv にする方法を紹介します
db_name と table_name は自身の環境に合わせて変更してください
またカラム名に予約語が入っていることを考慮して内部で生成している SQL をバッククオートで囲んでいます

環境

  • MySQL 5.6.22

SQL

SET
  @VTable = 'table_name'
;
SET
  @VAllCols = CONCAT('SELECT CONCAT(',(
      SELECT
        CONCAT('\`',(
            SELECT
              GROUP_CONCAT(COLUMN_NAME SEPARATOR '\`,\', \',\`')
            FROM
              information_schema.columns
            WHERE
              TABLE_NAME = @VTable
            GROUP BY
              table_name
          ), '\`) FROM ', @VTable, ';')
    ))
;
PREPARE stmt
FROM
  @VAllCols
;
EXECUTE stmt
;
DEALLOCATE PREPARE stmt
;

シェルから1行で実行したい場合

mysql -u user_name -p db_name -h 192.168.100.1 -e "SET @VTable = 'table_name'; SET @VAllCols = CONCAT('SELECT CONCAT(',(SELECT CONCAT('\`',(SELECT GROUP_CONCAT(COLUMN_NAME SEPARATOR '\`,\',\',\`') FROM information_schema.columns WHERE TABLE_NAME = @VTable GROUP BY table_name),'\`) FROM ', @VTable, ';'))); PREPARE stmt FROM @VAllCols; EXECUTE stmt; DEALLOCATE PREPARE stmt;"

最後に

自動でカラム情報を抽出しているのでカラムの順番は決められないのでご注意ください

参考サイト

0 件のコメント:

コメントを投稿