Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ฉันจะตรวจสอบได้อย่างไรว่าค่าเป็นจำนวนเต็มใน MySQL หรือไม่


เพื่อตรวจสอบว่าค่าที่กำหนดเป็นสตริงหรือไม่ เราใช้ฟังก์ชัน cast() หากค่าไม่ใช่ตัวเลข จะส่งกลับ 0 มิฉะนั้นจะคืนค่าที่เป็นตัวเลข ด้วยวิธีนี้เราสามารถตรวจสอบได้ว่าค่านั้นเป็นจำนวนเต็มหรือไม่

กรณีที่ 1 − ตรวจสอบสตริงที่มีจำนวนเต็ม

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

ต่อไปนี้เป็นผลลัพธ์ แสดงว่าค่าไม่ใช่ตัวเลข ดังนั้นจึงส่งกลับค่า 0

<ก่อนหน้า>+--------------------------------+| cast('John123456' ตามที่ไม่ได้ลงนาม) |+--------------------------------+| 0 |+--------------------------------+1 แถวในชุด, 1 คำเตือน (0.00 วินาที)

กรณีที่ 2 – ตรวจสอบเฉพาะค่าจำนวนเต็ม

mysql> เลือก cast('123456' ตามที่ไม่ได้ลงนาม);

ต่อไปนี้เป็นผลลัพธ์ แสดงว่าค่าเป็นตัวเลข ดังนั้นจึงคืนค่ามาเอง

<ก่อนหน้า>+---------------------------+| cast('123456' ตามที่ยังไม่ได้ลงนาม) |+--------------------------+| 123456 |+---------------------------+1 แถวในชุด (0.00 วินาที)

ตรรกะนี้ใช้ได้ดีกับ float เช่นกัน

ต่อไปนี้เป็นแบบสอบถามที่มีค่าทศนิยม

mysql>  เลือก CAST('78.90' ตามที่ไม่ได้ลงนาม);

นี่คือผลลัพธ์

<ก่อนหน้า>+---------------------------+| CAST('78.90' ตามที่ไม่ได้ลงนาม) |+--------------------------+| 78 |+--------------------------+1 แถวในชุด, 1 คำเตือน (0.00 วินาที)

ตรรกะสำรองกับโอเปอเรเตอร์ปกติ

มันใช้ได้กับทุกเงื่อนไขสำหรับค่าใด ๆ แม้กระทั่งแบบลอยตัว

เรามาสร้างตารางใหม่กันเถอะ

mysql> สร้างตาราง CheckingIntegerDemo   -> (   -> Value varchar(200)   -> );ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.88 วินาที)

กำลังแทรกระเบียนลงในตาราง

mysql> แทรกลงในค่า CheckingIntegerDemo ('John123456'); Query OK, 1 แถวได้รับผลกระทบ (0.10 วินาที)mysql>  แทรกลงในค่า CheckingIntegerDemo ('123456'); Query OK, 1 แถวได้รับผลกระทบ (0.16 วินาที)mysql> แทรก ลงในค่า CheckingIntegerDemo ('123.456'); แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.16 วินาที)

เพื่อแสดงรายการทั้งหมด

mysql> เลือก *จาก CheckingIntegerDemo;

นี่คือผลลัพธ์

<ก่อนหน้า>+-----------+| ค่า      |+-----------+| John123456 || 123456     || 123.456    |+-----------+3 แถวในชุด (0.00 วินาที

ในผลลัพธ์ข้างต้น มีเพียง 123456 เท่านั้นที่เป็นจำนวนเต็ม ส่วนที่เหลือไม่ใช่

ไวยากรณ์เพื่อตรวจสอบว่าค่าเป็นจำนวนเต็มหรือไม่

เลือก yourColumnName จาก yourTableName โดยที่ yourColumnName REGEXP '^-?[0-9]+$';

แบบสอบถามที่เราใช้นิพจน์ทั่วไป ซึ่งจะส่งออกเฉพาะค่าจำนวนเต็ม

mysql> เลือกค่าจาก CheckingIntegerDemo โดยที่ Value REGEXP '^-?[0-9]+$';

ต่อไปนี้เป็นผลลัพธ์

<ก่อนหน้า>+---------+| ค่า  |+-------+| 123456 |+--------+1 แถวในชุด (0.00 วินาที)