LoginSignup
0
0

More than 1 year has passed since last update.

MariaDBで文字列が整数かどうかをかなり厳密に判定

Last updated at Posted at 2022-09-09

やり方(0以上の整数かどうか判定)

正規表現を使った判定
SELECT '判定対象文字列' REGEXP '^(0|[1-9][0-9]*)$';
判定対象文字列 判定結果 備考
あいうえお FALSE
12あいうえお FALSE
e12 FALSE
12.1 FALSE
12.0 FALSE 見た目上は整数として扱えても、末尾に『.0』があるのでFALSE。
01 FALSE 見た目上は整数として扱えても、先頭に『0』があればFALSE。
012 FALSE 見た目上は整数として扱えても、先頭に『0』があればFALSE。
-12 FALSE
00 FALSE 見た目上は整数として扱えても、『0』が複数繰り返されるだけの構成はFALSE。
0 TRUE 『0』が1文字だけならTRUE
1 TRUE
9 TRUE
10 TRUE
10000000 TRUE

なぜCAST()ではなく正規表現を使うのか

CAST() を使うと想定通りの判定にならない為。

CAST('判定対象文字列' AS SIGNED) = 0 なら 整数ではない
というやり方だと想定通りの判定にならない場合がある。

例えば下記の結果は『0』ではなく『12』となってしまう。
先頭の『12』という文字列でキャストが成功してしまう。

SELECT CAST('12です' AS SIGNED);

演算コストはかかってしまうが、厳密に判定したいなら正規表現。

やり方(1以上の整数かどうか判定)

0をFALSEとしてよいなら正規表現パターンを少しシンプルにできる。

SELECT '判定対象文字列' REGEXP '^[1-9][0-9]*$';

やり方(-1や-10などの負もTRUEにしたい場合)

『-0』をFALSEにする為、マイナス記号を [1-9][0-9] 側に置くのがポイント。

SELECT '判定対象文字列' REGEXP '^(0|\-*[1-9][0-9]*)$';

参考サイトさん

バージョン

Windows 10 Pro 21H2 OSビルド 19044.1889
10.5.4-MariaDB

TODO:この記事の正規表現のロジックについて解説を載せておく

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0