MySQLでテキストフィールドから数字のみを抽出する方法を解説
MySQLでは、テキスト型(TEXT)のカラムに保存されたデータに、数字以外の記号や文字が混在していることがあります。例えば、ハイフン(-)、カンマ(,)、スペース、引用符などが含まれる場合、それらを取り除いて数字だけを抽出したいケースは少なくありません。
本記事では、REPLACE関数を組み合わせることで、テキストフィールドから数字のみを抽出する方法を、実際のSQL文と実行結果とともにわかりやすく解説します。
1. サンプルテーブルを作成する
まず、テキスト型のカラムを持つテーブルを作成します。
mysql> create table DemoTable
(
Number text
);
Query OK, 0 rows affected (0.49 sec)2. テストデータを挿入する
次に、INSERTコマンドを使って、数字と記号が混在したレコードを挿入します。
mysql> insert into DemoTable values('7364746464,-');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('-,8909094556');
Query OK, 1 row affected (0.23 sec)3. テーブルの内容を確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。数字の前後に「-」や「,」が含まれていることが確認できます。
+--------------+ | Number | +--------------+ | 7364746464,- | | -,8909094556 | +--------------+ 2 rows in set (0.00 sec)
4. REPLACE関数をネストして数字のみを抽出する
数字以外の文字を除去するには、REPLACE関数を入れ子(ネスト)にして、不要な文字を順番に空文字列に置き換えます。
mysql> select replace(replace(replace(replace(Number, '-', ''), ' ', ''), '"',''),',','') as Result from DemoTable;
このクエリでは、内側から順に以下の処理を行っています。
- ハイフン(-)を削除
- スペース(半角空白)を削除
- ダブルクォート(")を削除
- カンマ(,)を削除
実行結果は以下の通りです。数字のみがきれいに抽出されました。
+------------+ | Result | +------------+ | 7364746464 | | 8909094556 | +------------+ 2 rows in set (0.00 sec)
補足:より柔軟な方法について
上記の方法は、除去したい文字の種類があらかじめ分かっている場合に有効です。しかし、含まれる文字が不定の場合や、英字もまとめて除去したい場合は、REPLACE関数のネストが長くなりすぎて可読性が低下します。
そのような場合は、以下のような代替手段も検討できます。
- REGEXP_REPLACE関数:MySQL 8.0以降で利用可能。
REGEXP_REPLACE(Number, '[^0-9]', '')のように正規表現で「数字以外」を一括削除でき、シンプルに記述できます。 - アプリケーション側での処理:取得したデータをPHPやPythonなどのプログラム側で整形する方法もあります。
使用しているMySQLのバージョンに応じて、最適な方法を選択してください。
-
Javaで文字列から数値を抽出する方法|replaceAll()メソッドの使い方
java.lang.Stringクラスには、文字列を扱うための便利なメソッドが多数用意されています。これらのメソッドを活用することで、トリム(余分な空白の除去)、連結、変換、比較といったさまざまな文字列操作が可能になります。 文字列から数値だけを取り出したい場合は、StringクラスのreplaceAll()メソッドを使うのが最も手軽です。正規表現「[^0-9]」(0〜9以外のすべての文字に一致)を空文字列に置き換えることで、数字以外の文字を一括して削除できます。 サンプルコード import java.util.Scanner; public class StringExtractTest
-
【Python入門】正規表現でテキストから数値を抽出する方法をわかりやすく解説
Pythonでテキスト処理を行う際、「文章の中から数字だけを取り出したい」という場面は非常によくあります。そんなときに活躍するのが、標準ライブラリの re モジュールと正規表現です。この記事では、目的別に使える抽出パターンをサンプルコード付きで解説します。 数字を1文字ずつ個別に抽出する テキスト内のすべての数字を1桁ずつバラバラに抽出したい場合は、正規表現パターン \d を使用します。\d は「半角数字1文字」にマッチするメタ文字です。 サンプルコード import re s = 12345 abcdf 67 result = re.findall(r\d, s) print(result