Cách 1: Dùng CAST()
CAST('chuoi' AS UNSIGNED) trả về 0 nếu không phải số, trả về số nếu là số.
mysql> SELECT CAST('John123456' AS UNSIGNED);
+--------------------------------+
| CAST('John123456' AS UNSIGNED) |
+--------------------------------+
| 0 |
+--------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> SELECT CAST('123456' AS UNSIGNED);
+----------------------------+
| CAST('123456' AS UNSIGNED) |
+----------------------------+
| 123456 |
+----------------------------+
1 row in set (0.00 sec)
Cũng áp dụng cho float: CAST('78.90' AS UNSIGNED) → 78 (cảnh báo).
Cách 2: Dùng REGEXP (chính xác hơn)
mysql> CREATE TABLE CheckingIntegerDemo (Value VARCHAR(200));
Query OK, 0 rows affected (0.88 sec)
mysql> INSERT INTO CheckingIntegerDemo VALUES('John123456'),('123456'),('123.456');
Query OK, 3 rows affected (0.16 sec)
mysql> SELECT Value FROM CheckingIntegerDemo
-> WHERE Value REGEXP '^-?[0-9]+$';
+--------+ | Value | +--------+ | 123456 | +--------+ 1 row in set (0.00 sec)
Regex ^-?[0-9]+$ chỉ khớp số nguyên (có thể âm), loại trừ float và chuỗi chữ.