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

MySQL-এ SUBSTRING_INDEX() দিয়ে হাইফেন-বিভক্ত স্ট্রিং আলাদা কলামে বির্ভক্ত করা

একটি কলামে হাইফেন (-) দিয়ে আলাদা করা মান (যেমন '101-John-29') আলাদা আলাদা কলামে বির্ভক্ত করতে SUBSTRING_INDEX() ফাংশন নেস্টেডভাবে ব্যবহার করা হয়।

টেবিল ও ডেটা তৈরি

mysql> CREATE TABLE DemoTable1962 (EmployeeInformation TEXT);

mysql> INSERT INTO DemoTable1962 VALUES
    ('101-John-29'), ('102-David-35'), ('103-Chris-28');

ডেটা যাচাই

mysql> SELECT * FROM DemoTable1962;
+---------------------+
| EmployeeInformation |
+---------------------+
| 101-John-29         |
| 102-David-35        |
| 103-Chris-28        |
+---------------------+

কোয়ারী: ৩টি কলামে ভাগ করা

mysql> SELECT 
    SUBSTRING_INDEX(EmployeeInformation, '-', 1) AS EmployeeId,
    SUBSTRING_INDEX(SUBSTRING_INDEX(EmployeeInformation, '-', 2), '-', -1) AS EmployeeName,
    SUBSTRING_INDEX(SUBSTRING_INDEX(EmployeeInformation, '-', -2), '-', -1) AS EmployeeAge
    FROM DemoTable1962;

স্টেপ-বাই-স্টেপ ব্যাখ্যা:

  1. EmployeeId: SUBSTRING_INDEX(str, '-', 1) — প্রথম হাইফেনের বামপাশ।
  2. EmployeeName:
    • ইননার: SUBSTRING_INDEX(str, '-', 2) — প্রথম ২টি অংশ ('101-John')।
    • আউটার: SUBSTRING_INDEX(..., '-', -1) — সেটির শেষ হাইফেনের ডানপাশ ('John')।
  3. EmployeeAge:
    • ইননার: SUBSTRING_INDEX(str, '-', -2) — শেষ ২টি অংশ ('John-29')।
    • আউটার: SUBSTRING_INDEX(..., '-', -1) — সেটির শেষ হাইফেনের ডানপাশ ('29')।

আউটপুট:

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| 101        | John         | 29          |
| 102        | David        | 35          |
| 103        | Chris        | 28          |
+------------+--------------+-------------+

MySQL 8.0+ এ REGEXP_SUBSTR (সरल)

SELECT 
    REGEXP_SUBSTR(EmployeeInformation, '^[^-]+') AS EmployeeId,
    REGEXP_SUBSTR(EmployeeInformation, '(?<=-)[^-]+(?=-)') AS EmployeeName,
    REGEXP_SUBSTR(EmployeeInformation, '[^-]+$') AS EmployeeAge
FROM DemoTable1962;

সতর্কতা

  • হাইফেন সংখ্যা ফিক্সড (৩ পার্ট) থাকলেই এই পদ্ধতি কাজ করে।
  • ভিন্ন সংখ্যক পার্ট হলে ডাইনামিক পারসিং বা অ্যাপ্লিকেশন লেয়ারে হ্যান্ডল করুন।
  • নামে হাইফেন থাকলে (যেমন 'Mary-Jane') এই পদ্ধতি ভুল দেবে।

সর্বোত্তম অনুশীলন

নরমালাইজড স্কিমা ডিজাইন করুন: আলাদা কলামে EmployeeId, EmployeeName, EmployeeAge সংরক্ষণ করুন। স্ট্রিং পারসিং এড়িয়ে চলুন।

  1. MySQL-এ FIND_IN_SET() ব্যবহার করে কমা-বিন্যাসকৃত কলামে মান খুঁজে বের করা

  2. MySQL-এ ভিন্ন কলাম वाले টেবিলে ডেটা কপি করা (INSERT INTO SELECT)

  3. MySQL-এ দুটি কলামের মোট মান গণনা করা (NULL বাদ দিয়ে)

  4. MySQL-এ স্ট্রিং কলাম থেকে নির্দিষ্ট প্যাটার্নের রেকর্ড বের করা (স্ট্রিং, সংখ্যা, স্পেশাল ক্যারেক্টার)