MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで値が整数かどうかを判定する方法(CAST関数とREGEXPの使い方)

MySQLで特定の値が整数であるかどうかを確認したい場面は少なくありません。最も手軽な方法のひとつが、CAST()関数を使うやり方です。値が数値として解釈できない場合は「0」が返され、数値として有効な場合はその値自体が返されます。この仕組みを利用することで、値が整数かどうかを簡単に判別できます。

ケース1:文字列が混ざった値をチェックする

まずは、英字と数字が混在した文字列をCAST()関数でUNSIGNED型に変換してみましょう。

mysql> select cast('John123456' AS UNSIGNED);

実行結果は以下の通りです。「John」という文字列が含まれているため数値として扱えず、「0」が返されていることがわかります。

+--------------------------------+
| cast('John123456' AS UNSIGNED) |
+--------------------------------+
|                              0 |
+--------------------------------+
1 row in set, 1 warning (0.00 sec)

ケース2:整数値のみをチェックする

次に、純粋な整数値のみで構成された文字列を変換してみます。

mysql> select cast('123456' AS UNSIGNED);

今度は値が正しく数値として認識され、元の値そのものが返されます。

+----------------------------+
| cast('123456' AS UNSIGNED) |
+----------------------------+
|                     123456 |
+----------------------------+
1 row in set (0.00 sec)

浮動小数点数(小数)を指定した場合の挙動

このロジックは小数を含む値にも適用できます。ただし、UNSIGNED型へのキャストでは小数点以下が切り捨てられる点に注意が必要です。

以下は小数値「78.90」を指定したクエリです。

mysql> SELECT CAST('78.90' AS UNSIGNED);

実行結果を見ると、整数部分の「78」だけが返されています。

+---------------------------+
| CAST('78.90' AS UNSIGNED) |
+---------------------------+
|                        78 |
+---------------------------+
1 row in set, 1 warning (0.00 sec)

つまり、CAST()による判定では「整数かどうか」だけでなく「数値として解釈できるかどうか」も同時に確認できていることになります。

REGEXP(正規表現)を使ったより確実な判定方法

CAST()関数でも判定は可能ですが、より厳密に整数だけを抽出したい場合は正規表現(REGEXP演算子)を使う方法がおすすめです。この方法なら、小数や負数を含むあらゆる値に対して正確に判定できます。

まず、検証用のテーブルを作成します。

mysql> create table CheckingIntegerDemo
    -> (
    -> Value varchar(200)
    -> );
Query OK, 0 rows affected (0.88 sec)

続いて、テストデータを挿入しましょう。文字列混在・純粋な整数・小数の3種類を登録します。

mysql> insert into CheckingIntegerDemo values('John123456');
Query OK, 1 row affected (0.10 sec)

mysql> insert into CheckingIntegerDemo values('123456');
Query OK, 1 row affected (0.16 sec)

mysql> insert into CheckingIntegerDemo values('123.456');
Query OK, 1 row affected (0.16 sec)

登録したレコードをすべて表示して確認します。

mysql> select *from CheckingIntegerDemo;
+------------+
| Value      |
+------------+
| John123456 |
| 123456     |
| 123.456    |
+------------+
3 rows in set (0.00 sec)

この中で純粋な整数であるのは「123456」だけです。

整数判定に使う正規表現の構文

整数かどうかを判定するための基本構文は次の通りです。

select yourColumnName from yourTableName where yourColumnName REGEXP '^-?[0-9]+$';

この正規表現「^-?[0-9]+$」は、先頭に任意のマイナス記号(-)があり、その後に数字が1桁以上続く文字列のみにマッチします。これにより、小数や文字列が混ざった値は除外されます。

実際にテーブルに対して実行してみましょう。

mysql> select Value from CheckingIntegerDemo where Value REGEXP '^-?[0-9]+$';

実行結果は以下の通りで、整数値のみが抽出されています。

+--------+
| Value  |
+--------+
| 123456 |
+--------+
1 row in set (0.00 sec)

まとめ

  • CAST(値 AS UNSIGNED):数値に変換できない場合は0が返るため、簡易的な判定に使える。ただし小数は切り捨てられる点に注意。
  • REGEXP '^-?[0-9]+$':正規表現で厳密に整数のみを判定・抽出できる。負の整数にも対応。

用途に応じて両者を使い分けることで、MySQLでの整数判定を効率的に行えます。

  1. MySQLで列の値の先頭に文字列を追加(連結)する方法

    MySQLでは、列の値の先頭に文字列を追加したい場合、CONCAT関数を使用します。CONCAT関数はUPDATE文と組み合わせることで、既存のデータを一括して更新できます。 CONCAT関数とは CONCAT関数は、複数の文字列を連結するための関数です。「CONCAT(文字列1, 文字列2, ...)」のように引数を指定すると、それらを順番に結合した結果を返します。この特性を利用することで、列の値の前や後ろに任意の文字列を付加できます。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table PrependStringOnCOlumn

  2. MySQLで現在選択中のデータベースを確認する方法|DATABASE()関数とstatusコマンドの使い方

    MySQLに接続している際、「今どのデータベースを選択しているのか」を確認したい場面はよくあります。この記事では、DATABASE()関数やstatusコマンドを使って、現在選択中のデータベース名を簡単に確認する方法を解説します。 DATABASE()関数で選択中のデータベースを確認する MySQLでは、DUALテーブルに対してDATABASE()関数を実行することで、現在選択されているデータベース名を取得できます。 手順1:データベースを選択する まず、例として「business」というデータベースを選択してみましょう。以下のコマンドを実行します。 mysql> use busi