MySQL-এ কলাম মান রেগুলার এক্সপ্রেশন প্যাটার্ন অনুযায়ী ফিল্টার করতে REGEXP (বা RLIKE) অপারেটর ব্যবহার করা হয়। এটি LIKE চেয়ে অনেক বেশি শক্তিশালী এবং linh hoạt।
উদাহরণ
১. টেবিল তৈরি করুন
mysql> CREATE TABLE DemoTable1573 (
-> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentCode VARCHAR(20)
-> );
২. ডেটা ইনসার্ট করুন
mysql> INSERT INTO DemoTable1573(StudentCode) VALUES('STU_774');
mysql> INSERT INTO DemoTable1573(StudentCode) VALUES('909_Sam');
mysql> INSERT INTO DemoTable1573(StudentCode) VALUES('3_Carol_455');
mysql> INSERT INTO DemoTable1573(StudentCode) VALUES('David_903');
৩. সব রেকর্ড দেখুন
mysql> SELECT * FROM DemoTable1573;
আউটপুট:
+-----------+-------------+
| StudentId | StudentCode |
+-----------+-------------+
| 1 | STU_774 |
| 2 | 909_Sam |
| 3 | 3_Carol_455 |
| 4 | David_903 |
+-----------+-------------+
৪. REGEXP দিয়ে আন্ডারস্কোর এবং ডিজিট প্যাটার্ন মিল করুন
mysql> SELECT * FROM DemoTable1573 WHERE StudentCode REGEXP '_[0-9]';
নোট: ওরিজিনাল কোয়েরিতে '\land[0-9]' ছিল, যা সম্ভবত '_[0-9]' বা '[0-9]_' এর টাইপো। '_[0-9]' মানে আন্ডারস্কোর তারপর একটি ডিজিট।
৫. ফলাফল
+-----------+-------------+
| StudentId | StudentCode |
+-----------+-------------+
| 2 | 909_Sam |
| 3 | 3_Carol_455 |
+-----------+-------------+
ব্যাখ্যা:
- 'STU_774' - '_7' আছে, কিন্তু '_[0-9]' প্যাটার্ন ম্যাচ করবে (ম্যাচ হওয়া উচিত ছিল)। উদাহরণের আউটপুটে এটি নেই, সম্ভবত প্যাটার্ন '_[0-9]$' (শেষে) বা অন্য কিছু।
- '909_Sam' - '_S' (ডিজিট নয়), '_[0-9]' ম্যাচ করবে না। উদাহরণের আউটপুটে এটি আছে - প্যাটার্ন ভিন্ন হতে পারে।
সঠিক প্যাটার্ন উদাহরণ:
REGEXP '^[0-9]+_'- সংখ্যা দিয়ে শুরু, তারপর আন্ডারস্কোর।REGEXP '_[0-9]+$- আন্ডারস্কোর তারপর সংখ্যা দিয়ে শেষ।REGEXP '[0-9]{3}'- তিনটি সিকোয়েন্সিয়াল ডিজিট।
MySQL 8.0+ এ REGEXP_LIKE(), REGEXP_SUBSTR(), REGEXP_REPLACE() ফাংশনও আছে।