MySQLでVARCHAR文字列からハイフン以降の数値を削除する方法(SUBSTRING_INDEX活用)
MySQLで「John-232」のようなハイフンを含むVARCHAR型の文字列から、ハイフン以降の数値部分を削除したい場合があります。このような処理には、SUBSTRING_INDEX() 関数を使用すると簡単に実現できます。
SUBSTRING_INDEX()関数とは
SUBSTRING_INDEX(文字列, 区切り文字, 出現回数) は、指定した区切り文字が現れる位置より前の部分文字列を返す関数です。第3引数に「1」を指定すると、区切り文字が最初に出現する位置より前の文字列だけが取得されます。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable2040
-> (
-> StudentCode varchar(20)
-> );
Query OK, 0 rows affected (0.85 sec)
テストデータの挿入
INSERT文を使って、ハイフンと数値を含むレコードを挿入します。
mysql> insert into DemoTable2040 values('John-232');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable2040 values('Carol-901');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable2040 values('David-987');
Query OK, 1 row affected (0.21 sec)現在のデータを確認
SELECT文で全レコードを表示してみます。
mysql> select *from DemoTable2040;
実行結果は以下の通りです。
+-------------+
| StudentCode |
+-------------+
| John-232 |
| Carol-901 |
| David-987 |
+-------------+
3 rows in set (0.00 sec)
ハイフン以降の数値を削除するUPDATEクエリ
それでは、ハイフン以降の数値を削除するクエリを見ていきましょう。SUBSTRING_INDEX() を使って、ハイフンより前の名前部分のみで値を更新します。
mysql> update DemoTable2040
-> set StudentCode=substring_index(StudentCode,'-',1);
Query OK, 3 rows affected (0.21 sec)
Rows matched: 3 Changed: 3 Warnings: 0
更新後のデータを確認
再度テーブルの内容を確認してみます。
mysql> select *from DemoTable2040;
実行結果は以下の通りです。
+-------------+
| StudentCode |
+-------------+
| John |
| Carol |
| David |
+-------------+
3 rows in set (0.00 sec)
まとめ
このように、SUBSTRING_INDEX(StudentCode, '-', 1) を使うことで、ハイフンより前の文字列だけを抽出し、ハイフン以降の数値をまとめて削除できました。
なお、UPDATEではなくSELECTで抽出結果だけを確認したい場合は、以下のように記述することも可能です。
mysql> select substring_index(StudentCode,'-',1) as StudentName
-> from DemoTable2040;
元のデータを変更せずに表示だけ変えたい場合や、WHERE句での条件絞り込みに利用したい場合にも、SUBSTRING_INDEX()は非常に便利な関数です。
-
MySQLで文字列と数値が混在するVARCHARレコードを正しくソートする方法
はじめにVARCHAR型のカラムに「101J」や「100A」のような文字列と数値が混在したデータが格納されている場合、通常のORDER BY句では辞書順(文字コード順)にソートされるため、「103M」が「101J」より前に来るなど、意図しない順序になることがあります。このようなケースでは、ORDER BY句と「+0」による暗黙の型変換を組み合わせることで、数値部分を優先した自然な順序でソートできます。本記事では、その具体的な手順を実行例とともに解説します。1. テーブルを作成するまず、検証用のテーブルを作成します。mysql> create table DemoTable ->
-
MySQLで数字を含む文字列を自然な順序で並べ替える方法
MySQLで数字を含む文字列を自然な順序で並べ替える方法MySQLで「2J John has 9」や「2J John has 58」のように数字が混ざった文字列を並べ替えたい場合、単純なORDER BYでは文字列単位で比較されるため、意図したとおりの順序にならないことがあります。このようなときは、REGEXP_REPLACE関数やLENGTH関数をORDER BY句と組み合わせることで、人間にとって自然な順序(自然順ソート)を実現できます。ここでは、実際にテーブルを作成して手順を確認していきましょう。1. サンプルテーブルの作成まず、CREATE TABLE文でテーブルを作成します。mysql