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

รับเฉพาะตัวเลขโดยใช้ regexp ใน MySQL หรือไม่


หากคุณต้องการรับเฉพาะตัวเลขโดยใช้ REGEXP ให้ใช้นิพจน์ทั่วไปต่อไปนี้ ( ^[0-9]*$) ใน where clause

กรณีที่ 1 - หากคุณต้องการเฉพาะแถวที่มีตัวเลข 10 หลักและทั้งหมดต้องเป็นตัวเลขเท่านั้น ให้ใช้นิพจน์ทั่วไปด้านล่าง

SELECT *FROM yourTableNameWHERE yourColumnName REGEXP '^[0-9]{10}$';

กรณีที่ 2 - หากคุณต้องการเฉพาะแถวที่มีตัวเลขตั้งแต่ 1 ขึ้นไป ต่อไปนี้คือรูปแบบ −

SELECT *FROM yourTableNameWHERE yourColumnName REGEXP '^[0-9]*$';

ไวยากรณ์ด้านบนจะให้เฉพาะแถวที่ไม่มีอักขระใดๆ

เพื่อทำความเข้าใจไวยากรณ์ข้างต้น ให้เราสร้างตาราง แบบสอบถามเพื่อสร้างตารางมีดังนี้ −

mysql> แทรกลงในค่า OnlyDigits(UserId, UserName) ('123User1','John');Query OK, 1 แถวได้รับผลกระทบ (0.16 วินาที)mysql> แทรกลงใน OnlyDigits (UserId, UserName) ค่า ('3445User2', 'Carol');แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.19 วินาที) mysql> แทรกลงในค่า OnlyDigits (UserId ชื่อผู้ใช้) ('145363User3', 'Mike'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.20 วินาที) mysql> แทรกลงใน ค่า OnlyDigits(UserId, UserName) ('13455User4','Larry');Query OK, 1 แถวได้รับผลกระทบ (0.22 วินาที)mysql> แทรกลงใน OnlyDigits (UserId, UserName) ค่า ('123555User5','Sam');Query OK , 1 แถวได้รับผลกระทบ (0.15 วินาที)mysql> แทรกลงในค่า OnlyDigits(UserId, UserName) ('596766User6','David'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.24 วินาที)mysql> แทรกลงในค่า OnlyDigits (UserId, UserName) ('96977User7','Robert');Query OK, 1 แถวได้รับผลกระทบ (0.15 วินาที)mysql> แทรกลงในค่า OnlyDigits(UserId, UserName) ('99999User8','James');Query OK, 1 แถวได้รับผลกระทบ (0.20 วินาที )mysql> แทรกลงในค่า OnlyDigits(UserId, UserName) ('9999999','James'); ตกลง ตกลง 1 แถวได้รับผลกระทบ (0. 13 วินาที)mysql> แทรกลงในค่า OnlyDigits (UserId, UserName) ('153545','Maxwell'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.23 วินาที)mysql> แทรกลงใน OnlyDigits (UserId, UserName) ค่า ('9999986787', 'Johnson');แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.20 วินาที)

ตอนนี้คุณสามารถแสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select แบบสอบถามมีดังนี้ −

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

ต่อไปนี้คือผลลัพธ์ -

<ก่อนหน้า>+----+-------------+----------+| รหัส | รหัสผู้ใช้ | ชื่อผู้ใช้ |+----+-------------+----------+| 1 | 123User1 | จอห์น || 2 | 3445ผู้ใช้2 | แครอล || 3 | 145363ผู้ใช้3 | ไมค์ || 4 | 13455User4 | แลร์รี่ || 5 | 123555User5 | แซม || 6 | 596766ผู้ใช้6 | เดวิด || 7 | 96977User7 | โรเบิร์ต || 8 | 99999ผู้ใช้8 | เจมส์ || 9 | 9999999 | เจมส์ || 10 | 153545 | แม็กซ์เวลล์ || 11 | 999986787 | Johnson |+----+-------------+----------+11 แถวในชุด (0.00 วินาที)

กรณีที่ 1 - ต่อไปนี้คือข้อความค้นหาที่มี regex เมื่อคุณต้องการให้ตัวเลข 10 หลักเป็นสตริงและทั้งหมดต้องเป็นตัวเลข:

mysql> เลือก *จาก OnlyDigits-> โดยที่ UserId REGEXP '^[0-9]{10}$';

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

<ก่อนหน้า>+----+-----------+----------+| รหัส | รหัสผู้ใช้ | ชื่อผู้ใช้ |+----+-----------+----------+| 11 | 999986787 | Johnson |+----+------------+----------+1 แถวในชุด (0.00 วินาที)

นิพจน์ทั่วไปสำรองของกรณีที่ 1 แบบสอบถามมีดังนี้:

mysql> เลือก *จาก OnlyDigits-> โดยที่ UserId REGEXP '^[[:digit:]]{10}$';

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

<ก่อนหน้า>+----+-----------+----------+| รหัส | รหัสผู้ใช้ | ชื่อผู้ใช้ |+----+-----------+----------+| 11 | 999986787 | Johnson |+----+------------+----------+1 แถวในชุด (0.00 วินาที)

กรณีที่ 2 - หากคุณต้องการเฉพาะแถวที่มีตัวเลขตั้งแต่หนึ่งหลักขึ้นไป (เฉพาะตัวเลขเท่านั้น) แบบสอบถามมีดังนี้:

mysql> เลือก *จาก OnlyDigits-> โดยที่ UserId REGEXP'^[0-9]*$';

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

<ก่อนหน้า>+----+-----------+----------+| รหัส | รหัสผู้ใช้ | ชื่อผู้ใช้ |+----+-----------+----------+| 9 | 9999999 | เจมส์ || 10 | 153545 | แม็กซ์เวลล์ || 11 | 999986787 | Johnson |+----+------------+----------+3 แถวในชุด (0.00 วินาที)