MySQLで文字列に数字が含まれているかどうかを確認する方法
MySQLで文字列の中に数字が含まれているかどうかを調べたい場合は、REGEXP(正規表現)を使うのが最も簡単な方法です。カラムの値に対して REGEXP '[0-9]' という条件を指定することで、0〜9のいずれかの数字を1文字でも含むレコードだけを抽出できます。
基本構文
SELECT * FROM テーブル名 WHERE カラム名 REGEXP '[0-9]';
サンプルテーブルを作成する
それでは、実際に動きを確認してみましょう。まずはテスト用のテーブルを作成します。
mysql> create table StringContainsNumber
-> (
-> Id int not null auto_increment,
-> Words text,
-> primary key(Id)
-> );
Query OK, 0 rows affected (0.53 sec)テストデータを挿入する
次に、INSERT文を使っていくつかのレコードを登録します。数字を含む文字列と含まない文字列を混ぜて用意しておくと、結果が分かりやすくなります。
mysql> insert into StringContainsNumber(Words) values('He12345llo');
Query OK, 1 row affected (0.19 sec)
mysql> insert into StringContainsNumber(Words) values('MySQL is not a programming 4language');
Query OK, 1 row affected (0.17 sec)
mysql> insert into StringContainsNumber(Words) values('Java is an object oriented');
Query OK, 1 row affected (0.18 sec)
mysql> insert into StringContainsNumber(Words) values('Java does not support 456 multiple inheritance');
Query OK, 1 row affected (0.20 sec)
mysql> insert into StringContainsNumber(Words) values('MySQL is a RDBMS 456');
Query OK, 1 row affected (0.19 sec)登録済みの全レコードを確認する
SELECT文ですべてのデータを表示してみます。
mysql> select *from StringContainsNumber;
実行結果は以下のとおりです。
+----+------------------------------------------------+ | Id | Words | +----+------------------------------------------------+ | 1 | He12345llo | | 2 | MySQL is not a programming 4language | | 3 | Java is an object oriented | | 4 | Java does not support 456 multiple inheritance | | 5 | MySQL is a RDBMS 456 | +----+------------------------------------------------+ 5 rows in set (0.00 sec)
REGEXPで数字を含む文字列だけを抽出する
ここで本題のクエリです。WHERE句に Words REGEXP '[0-9]' を指定して実行します。
mysql> select *from StringContainsNumber where Words regexp '[0-9]';
実行結果は以下のとおりです。
+----+------------------------------------------------+ | Id | Words | +----+------------------------------------------------+ | 1 | He12345llo | | 2 | MySQL is not a programming 4language | | 4 | Java does not support 456 multiple inheritance | | 5 | MySQL is a RDBMS 456 | +----+------------------------------------------------+ 4 rows in set (0.11 sec)
結果のポイント
ご覧のとおり、Id 3(「Java is an object oriented」)だけが除外され、数字を1つでも含む4件のレコードが取得できました。このように、単語の途中に数字が埋め込まれている場合(例:He12345llo)でも問題なく検出できるのがREGEXPの強みです。
なお、'[0-9]' の代わりにPOSIX文字クラスである '[[:digit:]]' を使っても同じ結果が得られます。用途に応じて使い分けるとよいでしょう。
-
Swiftで文字列に特殊文字が含まれているか判定する2つの方法
Swiftで文字列に特殊文字が含まれているかどうかを確認したい場合、if文やswitch文による条件分岐でも実現できますが、その場合は膨大な条件式を記述する必要があり、コーディングにも実行速度にも大きな負担となってしまいます。そこで本記事では、正規表現を使う方法と、Swift標準のCharacterSetを活用する方法の2通りを、具体的なコード例とともにわかりやすく解説します。 方法1:正規表現を使って判定する まずはString型のextensionを作成し、特殊文字の有無を判定するプロパティを追加しましょう。 extension String { var containsSpeci
-
Swiftで文字列が別の文字列を含んでいるか確認する方法
Swiftである文字列に別の文字列が含まれているかどうかを確認するには、2つの異なる文字列が必要です。1つは検索対象となる文字列、もう1つはその中に特定の文字列が含まれているかを調べる元となる文字列です。 ここでは、確認したい文字列を「point」、全体の文字列を「TutorialsPoint」、そして別の文字列として「one two three」を使用して説明します。Playgroundでこれらの文字列を使って実際に確認してみましょう。 この確認は、以下に示す2つの方法で行うことができます。まずは3つの異なる文字列を作成します。 var completeStr1 = Tutorials po