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(正規表現)を使うことも検討するとよいでしょう。
-
MySQLでタイムスタンプ(UNIX時間)から日付のみを表示する方法
タイムスタンプ(UNIX時間)の値から日付を表示するには、MySQLのFROM_UNIXTIME()関数を使用します。この関数は、UNIXタイムスタンプを「YYYY-MM-DD HH:MM:SS」形式の日時に変換してくれます。ここでは、実際にテーブルを作成し、動作を確認していきましょう。 サンプルテーブルの作成 まず、タイムスタンプ値を格納するためのテーブルを作成します。 mysql> create table DemoTable -> ( -> timestampValue bigint -> ); Query OK, 0 rows affe
-
MySQLで英数字文字列から数字のみを基準に並べ替える方法
MySQLで英数字文字列から数字のみを基準に並べ替える方法「Adam_101」や「121John_567」のような英数字が混在した文字列から、数字の部分だけを基準にレコードを並べ替えたいケースはよくあります。MySQLでは、ORDER BY句とRIGHT()関数を組み合わせることで、このような並べ替えを簡単に実現できます。RIGHT()関数は、文字列の右端から指定した文字数を抽出する関数です。例えば「RIGHT(StudentCode, 3)」と記述すると、StudentCode列の値の末尾3文字が取得されます。これを並べ替えのキーとして指定することで、文字列中の数字部分を基準にソートが可能に