MySQLで末尾が特定の文字である場合、最後の文字を削除する方法
MySQLにおいて、文字列の末尾が特定の文字(たとえば疑問符「?」など)である場合に、その最後の1文字を削除したいことがあります。このような処理を行うには、SUBSTRING()関数とCHAR_LENGTH()関数を組み合わせて使用します。
それでは、実際にサンプルテーブルを作成して確認してみましょう。
サンプルテーブルの作成
mysql> create table DemoTable
(
SubjectName varchar(100)
);
Query OK, 0 rows affected (0.47 sec)データの挿入
次に、INSERTコマンドを使っていくつかのレコードを挿入します。末尾に「?」が付いているレコードと、付いていないレコードを混ぜて用意します。
mysql> insert into DemoTable values('MySQL');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('MongoDB?');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Java?');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('C');
Query OK, 1 row affected (0.16 sec)テーブルの内容を確認
SELECT文ですべてのレコードを表示します。
mysql> select *from DemoTable;
出力結果
+-------------+ | SubjectName | +-------------+ | MySQL | | MongoDB? | | Java? | | C | +-------------+ 4 rows in set (0.00 sec)
末尾が特定の文字の場合のみ削除するクエリ
ここからが本題です。末尾が「?」である場合にだけ、その最後の文字を削除するクエリは以下のようになります。
mysql> update DemoTable SET SubjectName = SUBSTRING(SubjectName, 1, CHAR_LENGTH(SubjectName) - 1) where SubjectName like '%?'; Query OK, 2 rows affected (0.25 sec) Rows matched : 2 Changed : 2 Warnings : 0
このクエリのポイントは次の2点です。
- SUBSTRING(SubjectName, 1, CHAR_LENGTH(SubjectName) - 1):文字列全体の長さから1を引いた分だけ先頭から切り出すことで、最後の1文字を取り除きます。
- WHERE SubjectName LIKE '%?':末尾が「?」で終わる行だけを更新対象とすることで、「MySQL」や「C」のような該当しない行には影響を与えません。
更新後の確認
もう一度テーブルのレコードを確認してみましょう。
mysql> select *from DemoTable;
出力結果
+-------------+ | SubjectName | +-------------+ | MySQL | | MongoDB | | Java | | C | +-------------+ 4 rows in set (0.00 sec)
実行結果のとおり、「MongoDB?」と「Java?」の2件から末尾の「?」だけが削除され、他のレコードはそのまま維持されていることがわかります。
補足:マルチバイト文字を扱う場合の注意点
日本語などのマルチバイト文字を含む列に対して同様の処理を行う場合は、CHAR_LENGTH()(文字数を返す)を使用すれば安全ですが、LENGTH()(バイト数を返す)を使うと文字化けや誤った切り出しの原因になるため注意が必要です。
-
MySQLで末尾の文字列に基づいてレコードをソートする方法
MySQLで文字列の末尾部分(例:「-D」や「-Smith」など)に基づいてレコードをソートしたい場合は、CASE式とORDER BY句を組み合わせることで実現できます。ここでは、実際のサンプルコードを使いながら、手順をわかりやすく解説します。 1. サンプルテーブルの作成 まずはデモ用のテーブルを作成します。顧客ID(ClientId)を自動採番の主キーとし、顧客名(ClientName)を格納するシンプルな構造です。 mysql> create table DemoTable -> ( -> ClientId int NOT NULL AUTO_INC
-
MySQLでハイフンより前の文字列を抽出する方法|SUBSTRING_INDEX関数の使い方
MySQLでは、SUBSTRING_INDEX() 関数を使うことで、特定の区切り文字(この例ではハイフン「-」)より前にある文字列を簡単に抽出できます。本記事では、実際にテーブルを作成し、データを挿入して、ハイフンより前の部分だけを取得する手順を解説します。 1. サンプルテーブルの作成 まず、以下のコマンドでサンプル用のテーブルを作成します。 mysql> create table DemoTable1857 ( Name varchar(20) ); Query OK, 0 rows affected (0.00 sec) 2. テストデータの挿入 次に、I