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

MySQLでハイフン記号を2つだけ含むレコードを抽出する方法

MySQLで「ハイフン記号(-)がちょうど2つ含まれている」レコードのみを取得したい場合は、LIKE演算子を組み合わせて条件を指定します。この記事では、具体的な手順をサンプルコードとともに解説します。

1. テーブルの作成

まず、サンプル用のテーブルを作成します。

mysql> create table DemoTable
   (
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   Password varchar(100)
   );
Query OK, 0 rows affected (1.27 sec)

AUTO_INCREMENTを設定したIdカラムと、varchar型のPasswordカラムを持つシンプルなテーブルです。

2. テストデータの挿入

次に、INSERT文を使っていくつかのレコードを挿入します。ここでは、ハイフンの数や位置が異なる4つのデータを用意しました。

mysql> insert into DemoTable(Password) values('John@--123');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(Password) values('---Carol234');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(Password) values('--David987');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Password) values('Mike----53443');
Query OK, 1 row affected (0.30 sec)

3. 挿入したレコードの確認

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

mysql> select *from DemoTable;

出力結果

+----+---------------+
| Id | Password      |
+----+---------------+
| 1  | John@--123    |
| 2  | ---Carol234   |
| 3  | --David987    |
| 4  | Mike----53443 |
+----+---------------+
4 rows in set (0.00 sec)

4. ハイフンが2つだけ含まれるレコードを抽出するクエリ

ポイントは、2つの条件をANDで組み合わせることです。

  • 「%--%」でハイフンが2つ連続して含まれるレコードを抽出
  • 同時に「NOT LIKE '%---%'」で3つ以上連続するハイフンを含むレコードを除外
mysql> select *from DemoTable where Password like '%--%' and password not like '%---%';

出力結果

+----+------------+
| Id | Password   |
+----+------------+
| 1  | John@--123 |
| 3  | --David987 |
+----+------------+
2 rows in set (0.06 sec)

解説

このクエリにより、「John@--123」と「--David987」の2件のみが取得されました。「---Carol234」(ハイフン3個)と「Mike----53443」(ハイフン4個)は、NOT LIKE条件によって正しく除外されています。

このように、LIKEとNOT LIKEを組み合わせることで、特定の文字列パターンを柔軟にフィルタリングできます。ただし注意点として、この方法では「--a-b」のように離れた位置にハイフンが存在するケースも一致する可能性があるため、より厳密に制御したい場合はREGEXP(正規表現)を使うことも検討するとよいでしょう。

  1. MySQLでタイムスタンプ(UNIX時間)から日付のみを表示する方法

    タイムスタンプ(UNIX時間)の値から日付を表示するには、MySQLのFROM_UNIXTIME()関数を使用します。この関数は、UNIXタイムスタンプを「YYYY-MM-DD HH:MM:SS」形式の日時に変換してくれます。ここでは、実際にテーブルを作成し、動作を確認していきましょう。 サンプルテーブルの作成 まず、タイムスタンプ値を格納するためのテーブルを作成します。 mysql> create table DemoTable -> ( -> timestampValue bigint -> ); Query OK, 0 rows affe

  2. MySQLで英数字文字列から数字のみを基準に並べ替える方法

    MySQLで英数字文字列から数字のみを基準に並べ替える方法「Adam_101」や「121John_567」のような英数字が混在した文字列から、数字の部分だけを基準にレコードを並べ替えたいケースはよくあります。MySQLでは、ORDER BY句とRIGHT()関数を組み合わせることで、このような並べ替えを簡単に実現できます。RIGHT()関数は、文字列の右端から指定した文字数を抽出する関数です。例えば「RIGHT(StudentCode, 3)」と記述すると、StudentCode列の値の末尾3文字が取得されます。これを並べ替えのキーとして指定することで、文字列中の数字部分を基準にソートが可能に