MySQLで作成日時(タイムスタンプ)入りのファイル名を持つCSVファイルへデータをエクスポートする方法
データをCSVファイルへエクスポートする際、ファイル名にそのファイルが作成された日時(タイムスタンプ)を含めたいことがあります。このような場合、MySQLのプリペアドステートメント(PREPARE文)を利用すれば簡単に実現できます。
基本的な仕組み
NOW()関数とDATE_FORMAT()関数で現在日時を文字列として取得し、出力先フォルダ・接頭辞・拡張子をCONCAT()関数で連結して、動的にSQL文を組み立てます。その後、PREPARE文とEXECUTE文でそのSQLを実行する流れです。
具体例
以下の例では、テーブル「student_info」のデータを、ファイル名にタイムスタンプが含まれるCSVファイルへエクスポートしています。
mysql> SET @time_stamp = DATE_FORMAT(NOW(),'_%Y_%m_%d_%H_%i_%s');
Query OK, 0 rows affected (0.00 sec)
mysql> SET @FOLDER = 'C:/mysql/bin/mysql-files/';
Query OK, 0 rows affected (0.00 sec)
mysql> SET @PREFIX = 'Student15';
Query OK, 0 rows affected (0.00 sec)
mysql> SET @EXT = '.CSV';
Query OK, 0 rows affected (0.00 sec)
mysql> SET @Command = CONCAT("SELECT * FROM Student_info INTO OUTFILE '",@FOLDER, @PREFIX, @time_stamp, @EXT,"' FIELDS ENCLOSED BY '\"' TERMINATED BY ';'
ESCAPED BY '\"'"," LINES TERMINATED BY '\r\n';");
Query OK, 0 rows affected (0.00 sec)
mysql> PREPARE stmt FROM @command;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> execute stmt;
Query OK, 6 rows affected (0.07 sec)
上記のクエリを実行すると、たとえば「student_2017_12_10_18_52_46.CSV」のように、タイムスタンプを含む名前のCSVファイルが生成されます。ファイルの中身は以下のようになります。
101;"YashPal";"Amritsar";"History" 105;"Gaurav";"Chandigarh";"Literature" 125;"Raman";"Shimla";"Computers" 130;"Ram";"Jhansi";"Computers" 132;"Shyam";"Chandigarh";"Economics" 133;"Mohan";"Delhi";"Computers"
ポイント解説
- @time_stamp: DATE_FORMAT(NOW(), '_%Y_%m_%d_%H_%i_%s') により、「年_月_日_時_分_秒」形式の現在日時を取得します。実行ごとに異なるファイル名になるため、既存ファイルの上書きを防止できます。
- @FOLDER/@PREFIX/@EXT: 出力先フォルダ、ファイル名の接頭辞、拡張子を変数として分けて定義しておくと、あとから設定を変更しやすくなります。
- @Command: CONCAT()で各要素を連結し、INTO OUTFILE句を含む完全なSQL文を動的に生成します。フィールドの囲み文字や区切り文字もここで指定しています。
- PREPARE/EXECUTE: INTO OUTFILE句には変数を直接記述できないため、プリペアドステートメントを経由して動的なSQLを実行するのがポイントです。
-
【MySQL入門】行数を連番(シリアル番号)として表示する新しい列を追加する方法
MySQLでSELECT文の結果に行数を連番(シリアル番号)としてカウントした新しい列を追加したい場合、ユーザー定義変数(グローバル変数)を活用することで実現できます。本記事では、実際にテーブルを作成し、データを登録しながら具体的な手順を解説します。 1. テーブルの作成 まずはサンプル用のテーブルを作成しましょう。以下のCREATE TABLE文を実行します。 mysql> create table addColumnToCountAsSerialNumber -> ( -> Id int, -> Name varchar(20),
-
MySQLで既存テーブルにcreated_atカラム(タイムスタンプ)を追加する方法
すでに作成済みのテーブルに「created_at」カラムを追加したい場合は、ALTERコマンドを使用します。この記事では、実際のSQL例とともに、タイムスタンプ型のカラムを追加してデフォルト値に現在時刻を自動設定する手順を解説します。1. サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。以下は「created_at」カラムがまだ存在しないテーブルを作成するクエリです。mysql> create table formDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> E