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()関数を活用すれば、分割された氏名や住所などのデータを結合した状態で柔軟に検索できます。
-
MySQLのSELECT文でフィールド(列)を生成する方法
MySQLのSELECT文でフィールドを生成するには?MySQLでは、SELECT文の中で AS キーワードを使用することで、テーブルに実際には存在しない新しいフィールド(仮想列)を生成し、結果セットに含めることができます。固定値や計算結果に別名を付けて出力できるため、レポート作成やデータ加工の際に非常に便利です。まずは、動作確認用のサンプルテーブルを作成しましょう。mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT P
-
MySQLで生年月日(DOB)から年齢を取得する方法
MySQLで生年月日(DOB:Date of Birth)から年齢を求めるには、TIMESTAMPDIFF()関数を使用します。第1引数に「YEAR」を指定すると、2つの日付の差が「年」単位で返されるため、誕生日から見た満年齢をそのまま計算できます。基本構文SELECT TIMESTAMPDIFF(YEAR, 日付カラム名, CURRENT_DATE) AS 任意の別名 FROM テーブル名;実際に試してみよう1. テーブルを作成するまずは生年月日を格納するテーブルを作成します。mysql> CREATE TABLE DemoTable -> ( -> I