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

MySQLのCONCAT()関数で結合フィールドの検索結果を取得する方法

MySQLでは、CONCAT()関数を使うことで、複数のカラム(フィールド)を1つの文字列として結合できます。この記事では、実際にテーブルを作成し、結合したフィールドの値に対してLIKE句で検索を行い、目的のレコードを取得するまでの手順を順番に解説します。

1. サンプルテーブルの作成

まず、顧客の氏名情報を格納するテーブルを作成しましょう。

mysql> create table DemoTable
    (
    ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ClientFirstName varchar(20),
    ClientLastName varchar(20)
    );
Query OK, 0 rows affected (0.50 sec)

2. レコードの挿入

続いて、INSERT文でいくつかのテストデータを追加します。

mysql> insert into DemoTable(ClientFirstName,ClientLastName) values('John','Smith');
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable(ClientFirstName,ClientLastName) values('John','Miller');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable(ClientFirstName,ClientLastName) values('Carol','Taylor');
Query OK, 1 row affected (0.13 sec)

mysql> insert into DemoTable(ClientFirstName,ClientLastName) values('Adam','Smith');
Query OK, 1 row affected (0.13 sec)

3. 登録済みレコードの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

上記のクエリを実行すると、次のような出力が得られます。

+----------+-----------------+----------------+
| ClientId | ClientFirstName | ClientLastName |
+----------+-----------------+----------------+
| 1        | John            | Smith          |
| 2        | John            | Miller         |
| 3        | Carol           | Taylor         |
| 4        | Adam            | Smith          |
+----------+-----------------+----------------+
4 rows in set (0.00 sec)

4. CONCAT()で結合したフィールドを検索する

ここが本題です。名前(ClientFirstName)と苗字(ClientLastName)をスペースで連結した文字列に対してLIKE句で前方一致検索を行い、該当するClientIdを取得します。

「Jo」で始まる氏名を持つレコードを抽出するクエリは次のとおりです。

mysql> select ClientId from DemoTable where concat(ClientFirstName,' ',ClientLastName) LIKE 'Jo%';

実行すると、以下のように該当するレコードのみが出力されます。

+----------+
| ClientId |
+----------+
| 1        |
| 2        |
+----------+
2 rows in set (0.00 sec)

ポイントまとめ

・CONCAT(カラム1, ' ', カラム2) のように、区切り文字は自由に指定できます。
・WHERE句の中でもCONCAT()は使えるため、結合後の値に対して直接条件を絞り込めます。
・LIKE 'Jo%' のような前方一致だけでなく、'%Smith' の後方一致や '%mi%' の部分一致検索にも対応できます。

このようにCONCAT()関数を活用すれば、分割された氏名や住所などのデータを結合した状態で柔軟に検索できます。

  1. MySQLのSELECT文でフィールド(列)を生成する方法

    MySQLのSELECT文でフィールドを生成するには?MySQLでは、SELECT文の中で AS キーワードを使用することで、テーブルに実際には存在しない新しいフィールド(仮想列)を生成し、結果セットに含めることができます。固定値や計算結果に別名を付けて出力できるため、レポート作成やデータ加工の際に非常に便利です。まずは、動作確認用のサンプルテーブルを作成しましょう。mysql> create table DemoTable     (     Id int NOT NULL AUTO_INCREMENT P

  2. MySQLで生年月日(DOB)から年齢を取得する方法

    MySQLで生年月日(DOB:Date of Birth)から年齢を求めるには、TIMESTAMPDIFF()関数を使用します。第1引数に「YEAR」を指定すると、2つの日付の差が「年」単位で返されるため、誕生日から見た満年齢をそのまま計算できます。基本構文SELECT TIMESTAMPDIFF(YEAR, 日付カラム名, CURRENT_DATE) AS 任意の別名 FROM テーブル名;実際に試してみよう1. テーブルを作成するまずは生年月日を格納するテーブルを作成します。mysql> CREATE TABLE DemoTable -> ( -> I