কম্পিউটার টিউটোরিয়াল

MySQL-এ REGEXP ব্যবহার করে শুধু ডিজিট সম্বলিত সারি খুঁজে বের করা

যদি আপনি 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]-এর সমান। ফোন নম্বর, আইডি, পিন কোড ভ্যালিডেশনে এই প্যাটার্নগুলো খুব কাজে লাগে।

  1. MySQL-এ WHERE শর্ত সহ SUM() ব্যবহার করে নির্দিষ্ট সেলগুলোর যোগফল বের করা

  2. MySQL 8.0-এ REGEXP_REPLACE() ব্যবহার করে সংখ্যা বাদ দিয়ে শুধু স্ট্রিং এবং '/' এক্সট্র্যাক্ট করুন

  3. MySQL-এ SELECT ... INTO @variable ব্যবহার করে নির্দিষ্ট রো থেকে একক মান বের করা

  4. MySQL স্টোরড প্রোসিডিউরে IN() ক্লজ ব্যবহার করে নির্দিষ্ট রেকর্ড বের করা