MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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変換にも安全に利用できます。

  1. 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コマンドを使ってテーブルに

  2. MySQLクエリの入力方法|基本ルールから複数行クエリまで解説

    MySQLクエリの入力方法コンソールでクエリを入力する前に、まずサーバーに正しく接続できているかを確認することが重要です。以下のクエリを実行すると、使用中のサーバーのバージョン番号と現在の日付が表示されます。mysql> SELECT VERSION(), CURRENT_DATE;ポイント:関数「VERSION()」や「CURRENT_DATE」は大文字・小文字を区別しません。つまり、「version()」「Version()」「vERsion()」など、いずれも同じ意味として処理されます。「CURRENT_DATE」についても同様です。MySQLクエリ実行時の基本ルールSQLクエリの