MySQLのCONCAT_WS()関数でクエリ結果をCSV形式に出力する方法
CONCAT_WS()関数とは
MySQLでクエリ結果をCSV(カンマ区切り値)形式で出力したい場合は、CONCAT_WS()関数を使用します。この関数は、指定した区切り文字で複数のカラムの値を連結し、1つの文字列として返してくれます。
基本構文
構文は以下の通りです。
SELECT CONCAT_WS(',', カラム名1, カラム名2, カラム名3, ....N) AS 任意の別名 FROM テーブル名;第一引数には区切り文字(ここではカンマ「,」)を指定し、第二引数以降に連結したいカラムを順番に列挙します。
実際に試してみよう
1. テーブルの作成
まず、動作を確認するためのサンプルテーブルを作成します。以下のクエリを実行してください。
mysql> CREATE TABLE CSVFormatOutputs
-> (
-> StudentId INT NOT NULL AUTO_INCREMENT,
-> StudentName VARCHAR(20),
-> StudentAge INT,
-> PRIMARY KEY(StudentId)
-> );
Query OK, 0 rows affected (1.15 sec)
学生ID・氏名・年齢の3カラムを持つシンプルなテーブルを作成しました。
2. レコードの挿入
次に、INSERT文でテストデータを登録します。
mysql> INSERT INTO CSVFormatOutputs(StudentName, StudentAge) VALUES('Mike', 23);
Query OK, 1 row affected (0.26 sec)
mysql> INSERT INTO CSVFormatOutputs(StudentName, StudentAge) VALUES('John', 26);
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO CSVFormatOutputs(StudentName, StudentAge) VALUES('Sam', 19);
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO CSVFormatOutputs(StudentName, StudentAge) VALUES('Carol', 27);
Query OK, 1 row affected (0.59 sec)
mysql> INSERT INTO CSVFormatOutputs(StudentName, StudentAge) VALUES('Bob', 24);
Query OK, 1 row affected (0.15 sec)3. 登録データの確認
SELECT文でテーブル内の全レコードを確認しておきましょう。
mysql> SELECT * FROM CSVFormatOutputs;
実行結果は以下の通りです。
+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
| 1 | Mike | 23 |
| 2 | John | 26 |
| 3 | Sam | 19 |
| 4 | Carol | 27 |
| 5 | Bob | 24 |
+-----------+-------------+------------+
5 rows in set (0.00 sec)
CONCAT_WS()でCSV形式に出力する
それでは、CONCAT_WS()を使って各レコードをカンマ区切りの1つの文字列として出力してみましょう。
mysql> SELECT CONCAT_WS(',', StudentId, StudentName, StudentAge) AS CSVFormat FROM CSVFormatOutputs;実行結果は以下の通りです。
+------------+
| CSVFormat |
+------------+
| 1,Mike,23 |
| 2,John,26 |
| 3,Sam,19 |
| 4,Carol,27 |
| 5,Bob,24 |
+------------+
5 rows in set (0.00 sec)
このように、各レコードが「ID,氏名,年齢」という形式のカンマ区切り文字列として出力されました。エクスポート処理や帳票出力など、CSV形式のデータが必要な場面で非常に便利です。
補足:NULL値の扱いについて
CONCAT_WS()の便利な特徴として、引数にNULLが含まれていてもエラーにならず、NULL以外の値のみが連結される点が挙げられます。通常のCONCAT()関数は引数の1つでもNULLがあると結果全体がNULLになってしまいますが、CONCAT_WS()ではNULLが自動的にスキップされるため、欠損値を含むデータのCSV変換にも安全に利用できます。
-
MySQLのWHERE句で複数のORを使うときの代替手段は?REGEXPでORクエリをスマートに書く方法
MySQLで「WHERE ... OR」のようにOR条件を複数つなげる代わりに、REGEXP(正規表現)を使うという代替手段があります。REGEXPでは「|」(パイプ)がORと同じ働きをするため、複数のキーワードをひとつの条件にまとめて簡潔に記述できるのが特徴です。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable684(EmployeeInformation text); Query OK, 0 rows affected (0.68 sec) レコードの挿入 続いて、INSERTコマンドを使ってテーブルに
-
MySQLクエリの入力方法|基本ルールから複数行クエリまで解説
MySQLクエリの入力方法コンソールでクエリを入力する前に、まずサーバーに正しく接続できているかを確認することが重要です。以下のクエリを実行すると、使用中のサーバーのバージョン番号と現在の日付が表示されます。mysql> SELECT VERSION(), CURRENT_DATE;ポイント:関数「VERSION()」や「CURRENT_DATE」は大文字・小文字を区別しません。つまり、「version()」「Version()」「vERsion()」など、いずれも同じ意味として処理されます。「CURRENT_DATE」についても同様です。MySQLクエリ実行時の基本ルールSQLクエリの