যদি আপনি REGEXP ব্যবহার করে শুধু ডিজিট সম্বলিত সারি পেতে চান, তবে WHERE ক্লজে নিচের রেগুলার এক্সপ্রেশন (^[0-9]*$) ব্যবহার করুন।
কেস ১ − যদি আপনি সেটি চান যেগুলো ঠিক ১০ ডিজিট ধারণ করে এবং সবগুলো ডিজিট হয়, তবে নিচের রেগুলার এক্সপ্রেশন ব্যবহার করুন:
SELECT *FROM yourTableName WHERE yourColumnName REGEXP '^[0-9]{10}$';
কেস ২ − যদি আপনি সেটি চান যেগুলো এক বা একাধিক ডিজিট ধারণ করে (শুধু ডিজিট), তবে নিচের সিনট্যাক্স ব্যবহার করুন:
SELECT *FROM yourTableName WHERE yourColumnName REGEXP '^[0-9]*$';
উপরের সিনট্যাক্স শুধু ডিজিট সম্বলিত সারিগুলো রিটার্ন করবে।
এটি বুঝতে একটি টেবিল তৈরি করা যাক। টেবিল তৈরির কোয়েরি:
mysql> insert into OnlyDigits(UserId, UserName) values('123User1','John'); Query OK, 1 row affected (0.16 sec) mysql> insert into OnlyDigits(UserId, UserName) values('3445User2','Carol'); Query OK, 1 row affected (0.19 sec) mysql> insert into OnlyDigits(UserId, UserName) values('145363User3','Mike'); Query OK, 1 row affected (0.20 sec) mysql> insert into OnlyDigits(UserId, UserName) values('13455User4','Larry'); Query OK, 1 row affected (0.22 sec) mysql> insert into OnlyDigits(UserId, UserName) values('123555User5','Sam'); Query OK, 1 row affected (0.15 sec) mysql> insert into OnlyDigits(UserId, UserName) values('596766User6','David'); Query OK, 1 row affected (0.24 sec) mysql> insert into OnlyDigits(UserId, UserName) values('96977User7','Robert'); Query OK, 1 row affected (0.15 sec) mysql> insert into OnlyDigits(UserId, UserName) values('99999User8','James'); Query OK, 1 row affected (0.20 sec) mysql> insert into OnlyDigits(UserId, UserName) values('9999999','James'); Query OK, 1 row affected (0.13 sec) mysql> insert into OnlyDigits(UserId, UserName) values('153545','Maxwell'); Query OK, 1 row affected (0.23 sec) mysql> insert into OnlyDigits(UserId, UserName) values('9999986787','Johnson'); Query OK, 1 row affected (0.20 sec)
সিলেক্ট স্টেটমেন্ট দিয়ে সব রেকর্ড দেখানো যাক। কোয়েরিটি হলো:
mysql> select *from OnlyDigits;
আউটপুট নিচে দেওয়া হলো:
+----+-------------+----------+ | Id | UserId | UserName | +----+-------------+----------+ | 1 | 123User1 | John | | 2 | 3445User2 | Carol | | 3 | 145363User3 | Mike | | 4 | 13455User4 | Larry | | 5 | 123555User5 | Sam | | 6 | 596766User6 | David | | 7 | 96977User7 | Robert | | 8 | 99999User8 | James | | 9 | 9999999 | James | | 10 | 153545 | Maxwell | | 11 | 9999986787 | Johnson | +----+-------------+----------+ 11 rows in set (0.00 sec)
কেস ১ − ঠিক ১০ ডিজিট এবং সবগুলো নম্বর হয় এমন সারি পাওয়ার রেগেক্স সহ কোয়েরি:
mysql> select *from OnlyDigits
-> where UserId REGEXP '^[0-9]{10}$';
আউটপুট:
+----+------------+----------+ | Id | UserId | UserName | +----+------------+----------+ | 11 | 9999986787 | Johnson | +----+------------+----------+ 1 row in set (0.00 sec)
বিকল্প রেগুলার এক্সপ্রেশন (কেস ১): ^[[:digit:]]{10}$। কোয়েরিটি:
mysql> select *from OnlyDigits
-> where UserId REGEXP '^[[:digit:]]{10}$';
আউটপুট একই।
কেস ২ − এক বা একাধিক ডিজিট (শুধু ডিজিট) সম্বলিত সারি পাওয়ার কোয়েরি:
mysql> select *from OnlyDigits -> where UserId REGEXP'^[0-9]*$';
আউটপুট:
+----+------------+----------+ | Id | UserId | UserName | +----+------------+----------+ | 9 | 9999999 | James | | 10 | 153545 | Maxwell | | 11 | 9999986787 | Johnson | +----+------------+----------+ 3 rows in set (0.00 sec)
ব্যাখ্যা: ^[0-9]{10}$ মানে স্ট্রিংয়ের শুরু (^) থেকে শেষ ($) পর্যন্ত ঠিক ১০টি ডিজিট। ^[0-9]*$ মানে শুরু থেকে শেষ পর্যন্ত শূন্য বা অধিক ডিজিট (অন্য কোনো ক্যারেক্টার নেই)। [[:digit:]] হলো POSIX ক্যারেক্টার ক্লাস যা [0-9]-এর সমান। ফোন নম্বর, আইডি, পিন কোড ভ্যালিডেশনে এই প্যাটার্নগুলো খুব কাজে লাগে।