MySQLで1文字だけをパターンマッチする方法(%の代わりに_を使用)
MySQLで任意の1文字に一致させる方法
MySQLのLIKE句によるパターンマッチングでは、「%」は0文字以上の任意の文字列に一致しますが、厳密に1文字だけに一致させたい場合は、代わりにアンダースコア(_)を使用します。
基本構文は以下のとおりです。
SELECT *FROM yourTableName WHERE yourColumnName LIKE 'yourString_';
この構文の動作を理解するために、実際にテーブルを作成して確認してみましょう。
サンプルテーブルの作成
まず、卒業年を格納するテーブルを作成します。テーブル作成クエリは次のとおりです。
mysql> create table OneCharactermatchDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> PassoutYear year,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.76 sec)
テストデータの挿入
続いて、INSERTコマンドを使っていくつかのレコードを挿入します。
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2008');
Query OK, 1 row affected (0.14 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2007');
Query OK, 1 row affected (0.18 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2010');
Query OK, 1 row affected (0.10 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2011');
Query OK, 1 row affected (0.13 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2012');
Query OK, 1 row affected (0.12 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2006');
Query OK, 1 row affected (0.10 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2019');
Query OK, 1 row affected (0.14 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2016');
Query OK, 1 row affected (0.13 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2017');
Query OK, 1 row affected (0.34 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2015');
Query OK, 1 row affected (0.17 sec)
mysql> insert into OneCharactermatchDemo(PassoutYear) values('2020');
Query OK, 1 row affected (0.13 sec)登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from OneCharactermatchDemo;
実行結果は以下のとおりです。
+----+-------------+
| Id | PassoutYear |
+----+-------------+
| 1 | 2008 |
| 2 | 2007 |
| 3 | 2010 |
| 4 | 2011 |
| 5 | 2012 |
| 6 | 2006 |
| 7 | 2019 |
| 8 | 2016 |
| 9 | 2017 |
| 10 | 2015 |
| 11 | 2020 |
+----+-------------+
11 rows in set (0.00 sec)
アンダースコア(_)で1文字に一致させる検索
それでは、アンダースコアを使って末尾の1文字を任意として「200」で始まる4桁の年に一致するレコードを検索してみます。
mysql> select *from OneCharactermatchDemo where PassoutYear Like '200_';
実行結果は以下のとおりです。
+----+-------------+
| Id | PassoutYear |
+----+-------------+
| 1 | 2008 |
| 2 | 2007 |
| 6 | 2006 |
+----+-------------+
3 rows in set (0.00 sec)
上記の出力からわかるように、'200_'というパターンは「2006」「2007」「2008」の3件に一致しました。「%」を使った場合とは異なり、アンダースコア(_)はちょうど1文字だけに一致するため、意図した範囲に限定された結果が得られます。
なお、アンダースコアは複数連ねることも可能です。たとえば'2___'とすれば、先頭が「2」の4桁の値すべてに一致します。用途に応じて「%」と「_」を使い分けることで、柔軟なパターンマッチングを実現できます。
-
MySQLのSOUNDEX()関数を使って発音が似た文字列を検索する方法
SOUNDEX()関数とはMySQLのSOUNDEX()関数は、文字列からサウンドex(Soundex)コードと呼ばれる音声表現の文字列を返します。Soundexは、英語の発音の類似性に基づいて文字列をインデックス化するアルゴリズムで、発音がほぼ同じ2つの文字列は、同一のSoundexコードを持つという特徴があります。この特性を活かすことで、スペルは異なるが発音が似ている名前や単語を効率的に検索できます。SOUNDEX()を使用したクエリの基本構文MySQLでSOUNDEX()を使って検索するには、以下のような構文を使用します。SELECT * FROM テーブル名 WHERE SOUNDEX
-
MySQLのREPLACE()関数でテーブル内の文字を置き換える方法
MySQLでは、REPLACE()関数を使うことで、文字列の中から特定の1文字だけを簡単に置き換えることができます。この記事では、実際にテーブルを作成し、UPDATE文とREPLACE()関数を組み合わせて文字を置き換える手順を、サンプルコード付きでわかりやすく解説します。 1. サンプルテーブルを作成する まず、置き換え対象となるテーブルを作成します。 mysql> create table DemoTable -> ( -> Name varchar(20) -> ); Query OK, 0 rows affected (0.69 sec