Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL REGEXP से विशिष्ट शब्द संख्या वाले रिकॉर्ड ढूंढें

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

उपयोग के मामले

  • डेटा गुणवत्ता: नाम क्षेत्र में पूरे नाम बनाम एकल नाम
  • पाठ विश्लेषण: वाक्य/वाक्यांश लंबाई
  • सत्यापन: अपेक्षित प्रारूप जांच
  1. - MySQL में कॉमा-सेपरेटेड मान वाले कॉलम में विशिष्ट संख्या खोजकर रिकॉर्ड चुनें

    CONCAT() + LIKE कॉमा सेपरेटेड स्ट्रिंग में सटीक संख्या मिलान के लिए: select * from yourTableName where concat(,, yourColumnName, ,) like %,yourValue,%; उदाहरण insert into demo49 values(4,5,6,Adam), (5,3,2,Mike), (3,4,9,Bob); संख्या 4 खोजना select * from demo49 where concat(,, id, ,) like %,4,%;

  1. - MySQL REGEXP: विशिष्ट संख्या से शुरू होने वाले स्ट्रिंग+नंबर रिकॉर्ड प्राप्त करें

    REGEXP पैटर्न Select yourColumnName1, yourColumnName2 from yourTableName where yourColumnName2 REGEXP ^yourStringValue[yourNumericValue]; उदाहरण: John से शुरू और फिर 5 या 6 insert into demo45(value) values(John500), (John1500), (John5500), (John6500), (John8600); क्वेरी: ^John[56] select id,val

  1. - MySQL में FIND_IN_SET() से कॉमा-सेपरेटेड कॉलम में विशिष्ट संख्या वाले रिकॉर्ड चुनें

    FIND_IN_SET() फ़ंक्शन FIND_IN_SET(str, strlist) कॉमा-सेपरेटेड सूची में स्ट्रिंग की स्थिति लौटाता है (1-आधारित); नहीं मिलने पर 0। उदाहरण insert into demo73 values(100,101,103,105,SSC), (105,103,1005,1003,104,Computer), (110,105,104,111,Novel); संख्या 103 खोजना 0; +-----------------------+-------