MySQL में SUBSTRING_INDEX() और LOCATE() फ़ंक्शन का उपयोग करके डिलिमिटर (जैसे अंडरस्कोर) के आधार पर कॉलम को भागों में विभाजित किया जा सकता है।
सिंटैक्स
SUBSTRING_INDEX(str, delim, count)
-- count > 0: बाएं से count भाग
-- count < 0: दाएं से |count| भाग
उदाहरण: पहला भाग प्राप्त करें (पहले '_' से पहले)
mysql> CREATE TABLE DemoTable (Name VARCHAR(40));
mysql> INSERT INTO DemoTable VALUES ('John_Smith'), ('Carol_Taylor'), ('David_Miller');
डेटा
+--------------+
| Name |
+--------------+
| John_Smith |
| Carol_Taylor |
| David_Miller |
+--------------+
क्वेरी
mysql> SELECT IF(LOCATE('_', Name) = 0, '', SUBSTRING_INDEX(Name, '_', 1))
-> FROM DemoTable;
परिणाम
+---------------------------------------------------------+
| John |
| Carol |
| David |
+---------------------------------------------------------+
व्याख्या
LOCATE('_', Name)- '_' की स्थिति खोजता है (0 = नहीं मिला)IF(LOCATE(...) = 0, '', ...)- डिलिमिटर न होने पर खाली स्ट्रिंगSUBSTRING_INDEX(Name, '_', 1)- पहले '_' से पहले का भाग
दोनों भाग प्राप्त करें
SELECT
SUBSTRING_INDEX(Name, '_', 1) AS FirstPart,
SUBSTRING_INDEX(Name, '_', -1) AS LastPart
FROM DemoTable;
परिणाम
+-----------+----------+
| FirstPart | LastPart |
+-----------+----------+
| John | Smith |
| Carol | Taylor |
| David | Miller |
+-----------+----------+
एकाधिक डिलिमिटर (MySQL 8.0+)
-- JSON_TABLE या रिकर्सिव CTE का उपयोग करें
-- या एप्लिकेशन लेयर पर विभाजित करें
बेहतर डिज़ाइन
अलग कॉलम में संग्रहीत करें: FirstName, LastName। विभाजन क्वेरी समय पर महंगा और त्रुटि-प्रवण है।