MySQL REGEXP का उपयोग करके कॉलम में विशिष्ट संख्या में शब्द (स्पेस से अलग) वाले रिकॉर्ड ढूंढ सकते हैं।
पैटर्न: ठीक 2 शब्द (स्पेस से अलग)
WHERE कॉलम REGEXP '^[^ ]+ [^ ]+$'
उदाहरण
1. टेबल बनाएं
mysql> CREATE TABLE DemoTable1412 (Name VARCHAR(40));
2. डेटा डालें
mysql> INSERT INTO DemoTable1412 VALUES('John Adam Carol'); -- 3 शब्द
mysql> INSERT INTO DemoTable1412 VALUES('Mike Sam'); -- 2 शब्द
mysql> INSERT INTO DemoTable1412 VALUES('Chris James Robert'); -- 3 शब्द
3. ठीक 2 शब्द वाले रिकॉर्ड
mysql> SELECT * FROM DemoTable1412
-> WHERE Name REGEXP '^[^ ]+ [^ ]+$';
4. परिणाम
+----------+ | Name | +----------+ | Mike Sam | +----------+
पैटर्न व्याख्या
| भाग | अर्थ |
|---|---|
^ | स्ट्रिंग शुरुआत |
[^ ]+ | गैर-स्पेस वर्णों का अनुक्रम (1 शब्द) |
| एक स्पेस |
[^ ]+ | दूसरा शब्द |
$ | स्ट्रिंग अंत |
सामान्यीकृत: N शब्द
-- 1 शब्द: ^[^ ]+$
-- 2 शब्द: ^[^ ]+ [^ ]+$
-- 3 शब्द: ^[^ ]+ [^ ]+ [^ ]+$
-- N शब्द: ^([^ ]+ ){N-1}[^ ]+$
MySQL 8.0+: REGEXP_REPLACE/REGEXP_SUBSTR
-- शब्द गिनती (लगभग)
SELECT Name,
LENGTH(Name) - LENGTH(REPLACE(Name, ' ', '')) + 1 AS word_count
FROM DemoTable1412
WHERE LENGTH(Name) - LENGTH(REPLACE(Name, ' ', '')) + 1 = 2;
सीमाएं
- एकाधिक लगातार स्पेस संभालता नहीं
- टैब/न्यूलाइन विभाजक नहीं संभालता
- अग्रणी/अनुगामी स्पेस से गलत गिनती
बेहतर: TRIM + REPLACE
WHERE LENGTH(TRIM(Name)) - LENGTH(REPLACE(TRIM(Name), ' ', '')) + 1 = 2
उपयोग के मामले
- डेटा गुणवत्ता: नाम क्षेत्र में पूरे नाम बनाम एकल नाम
- पाठ विश्लेषण: वाक्य/वाक्यांश लंबाई
- सत्यापन: अपेक्षित प्रारूप जांच