MySQLで列の値が文字列か数値かを判定して取得する方法
MySQLで列の値が文字列か数値かを判別する方法
MySQLでは、正規表現を使ったREGEXP演算子を利用することで、列の値が文字列なのか数値なのかを簡単に判別できます。
基本構文
文字列の値のみを取得したい場合は、以下の構文を使用します。
select *from yourTableName where yourColumnName NOT regexp '^[0-9]+$';
数値のみを取得したい場合は、以下の構文を使用します。
select *from yourTableName where yourColumnName regexp '^[0-9]+$';
ここで使われている正規表現 ^[0-9]+$ は、「先頭から末尾までがすべて0〜9の数字で構成されている」という意味です。このパターンに一致しない値(NOT regexp)を抽出すれば文字列のみ、一致する値を抽出すれば数値のみを取得できます。
実際の動作を確認する
まず、サンプル用のテーブルを作成しましょう。
mysql> create table DemoTable(
Id varchar(100)
);
Query OK, 0 rows affected (0.49 sec)
次に、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。数値だけの値と文字列を含む値を混ぜて登録します。
mysql> insert into DemoTable values('1000');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Carol_Smith');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2000');
Query OK, 1 row affected (0.10 sec)
SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
以下のような出力が得られます。
+-------------+ | Id | +-------------+ | 1000 | | John | | Carol_Smith | | 2000 | +-------------+ 4 rows in set (0.00 sec)
ケース1:文字列の値のみを取得する
文字列の値だけを取得するには、以下のクエリを実行します。
mysql> select *from DemoTable where Id NOT regexp '^[0-9]+$';
実行結果として、文字列の列値のみが表示されます。
+-------------+ | Id | +-------------+ | John | | Carol_Smith | +-------------+ 2 rows in set (0.00 sec)
ケース2:数値のみを取得する
数値だけを取得するには、以下のクエリを実行します。
mysql> select *from DemoTable where Id regexp '^[0-9]+$';
実行結果として、数値の列値のみが表示されます。
+------+ | Id | +------+ | 1000 | | 2000 | +------+ 2 rows in set (0.00 sec)
まとめ
REGEXP '^[0-9]+$' を使うことで、VARCHAR型の列に格納された値が純粋な数値か文字列かを判別できます。データクレンジングや型の整合性チェックなど、文字列と数値が混在するデータを扱う際に非常に便利なテクニックです。
-
MySQLで列の文字列値に特定の文字列が含まれているかどうかを確認する方法
CONCAT()とLIKE演算子を使った文字列の部分一致チェックMySQLである列(カラム)内の文字列値に、特定の文字列が含まれているかどうかを確認したい場合は、CONCAT()関数をLIKE演算子と組み合わせて使用します。これにより、双方向の一致チェックが可能になります。まずはサンプル用のテーブルを作成してみましょう。mysql> create table DemoTable( Name varchar(40));Query OK, 0 rows affected (0.56 sec)次に、INSERTコマンドを使ってテーブルにレコードを挿入します。m
-
MySQL正規表現の使い方:文字列内に含まれる数字をマッチさせる方法
MySQLのREGEXPで文字列内の数字を検索する方法 MySQLでは、REGEXP演算子を使うことで、文字列の中に数字が含まれているレコードを簡単に抽出できます。文字列内の数字(0〜9)にマッチさせたい場合は、以下のような構文を使用します。 SELECT * FROM テーブル名 WHERE カラム名 REGEXP [0-9]; なお、正規表現では [0-9] の代わりに \\d を使うこともできますが、MySQLのREGEXPでは文字クラス [0-9] を指定するのが最も確実で一般的な方法です。 サンプルテーブルの作成 実際に動作を確認するために、まずテーブルを作成しましょう。 mysq