ใช้ CAST(value AS UNSIGNED) หรือ REGEXP เพื่อเช็คว่าค่าเป็น Integer จริงๆ
วิธีที่ 1: CAST()
mysql> SELECT CAST('John123456' AS UNSIGNED); -- 0 (ไม่ใช่ตัวเลข)
mysql> SELECT CAST('123456' AS UNSIGNED); -- 123456 (เป็นตัวเลข)
mysql> SELECT CAST('78.90' AS UNSIGNED); -- 78 (Float → Truncate)
Logic: ไม่ใช่ตัวเลข → คืน 0 | เป็นตัวเลข → คืนค่าตัวเลข (ตัดทศนิยม)
วิธีที่ 2: REGEXP (แม่นยำกว่า สำหรับ Integer เท่านั้น)
mysql> CREATE TABLE CheckingIntegerDemo (Value VARCHAR(200));
mysql> INSERT INTO CheckingIntegerDemo VALUES ('John123456'), ('123456'), ('123.456');
mysql> SELECT Value FROM CheckingIntegerDemo
-> WHERE Value REGEXP '^-?[0-9]+$';
ผลลัพธ์ (ได้เฉพาะ Integer จริง):
+--------+ | Value | +--------+ | 123456 | +--------+
อธิบาย Regex: ^-?[0-9]+$
^เริ่มต้น String-?ตัวลบได้ 0 หรือ 1 ตัว[0-9]+ตัวเลข 1 ตัวขึ้นไป$จบ String
กรณี Float ที่ต้องการยอมรับ
-- รับ Float ได้ (มีจุดทศนิยม) WHERE Value REGEXP '^-?[0-9]+(\.[0-9]+)?$'
แนะนำ: ใช้ REGEXP สำหรับ Validation ก่อน Insert/Update ใช้ CAST สำหรับ Convert เหลือแต่ตัวเลข (ตัดทศนิยม)