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

MySQL में REGEXP का उपयोग करके विशिष्ट शब्द कैसे खोजें?

MySQL में REGEXP का उपयोग करके पैटर्न मिलान और शब्द खोज

MySQL का REGEXP ऑपरेटर नियमित अभिव्यक्तियों का उपयोग करके पैटर्न मिलान करने की अनुमति देता है। यह सरल LIKE की तुलना में अधिक शक्तिशाली और लचीला है।

टेबल बनाना

mysql> CREATE TABLE DemoTable (
    -> Title VARCHAR(255)
    -> );
Query OK, 0 rows affected (1.82 sec)

डेटा डालना

mysql> INSERT INTO DemoTable VALUES ('John is a good player');
Query OK, 1 row affected (0.26 sec)
mysql> INSERT INTO DemoTable VALUES ('No,John Doe is not a good player');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable VALUES ('Yes,Adam Smith is play cricket match');
Query OK, 1 row affected (0.28 sec)

-- फुलटेक्स्ट इंडेक्स जोड़ना (वैकल्पिक, REGEXP के लिए आवश्यक नहीं)
mysql> ALTER TABLE DemoTable ADD FULLTEXT(Title);
Query OK, 0 rows affected, 1 warning (10.60 sec)

सभी रिकॉर्ड्स देखना

mysql> SELECT * FROM DemoTable;
+--------------------------------------+
| Title                                |
+--------------------------------------+
| John is a good player                |
| No,John Doe is not a good player     |
| Yes,Adam Smith is play cricket match |
+--------------------------------------+
3 rows in set (0.00 sec)

REGEXP का उपयोग करके 'John' शब्द खोजना

mysql> SELECT * FROM DemoTable 
    -> WHERE Title REGEXP '^.*John.*$';

परिणाम

+----------------------------------+
| Title                            |
+----------------------------------+
| John is a good player            |
| No,John Doe is not a good player |
+----------------------------------+
2 rows in set (0.11 sec)

REGEXP पैटर्न व्याख्या

  • ^: स्ट्रिंग की शुरुआत
  • .*: कोई भी वर्ण (0 या अधिक बार)
  • John: शाब्दिक स्ट्रिंग "John"
  • .*: कोई भी वर्ण (0 या अधिक बार)
  • $: स्ट्रिंग का अंत

पैटर्न '^.*John.*$' का अर्थ है: "John" शब्द कहीं भी आने वाली कोई भी स्ट्रिंग।

सरल समतुल्य पैटर्न

-- ये समान हैं:
WHERE Title REGEXP 'John'           -- कहीं भी 'John' खोजता है
WHERE Title REGEXP '^.*John.*$'     -- स्पष्ट एंकर के साथ वही

उन्नत REGEXP पैटर्न

पैटर्नविवरणउदाहरण मिलान
'^John''John' से शुरू होता है'John is...'
'John$''John' पर समाप्त होता है'...John'
'[Jj]ohn''John' या 'john' (केस-असंवेदनशील)'John', 'john'
'John|Jane''John' या 'Jane''John', 'Jane'
'Jo.n''Jo' + कोई भी वर्ण + 'n''John', 'Joan'
'Jo.*n''Jo' + कोई भी वर्ण + 'n''John', 'Joan', 'Jon'
'\\bJohn\\b'पूरा शब्द 'John' (शब्द सीमा)'John' लेकिन 'Johnny' नहीं

केस संवेदनशीलता

-- डिफ़ॉल्ट: केस-असंवेदनशील (कॉलेशन पर निर्भर)
WHERE Title REGEXP 'john'  -- 'John', 'JOHN', 'john' से मेल खाएगा

-- केस-संवेदनशील:
WHERE Title REGEXP BINARY 'john'  -- केवल 'john' से मेल खाएगा

प्रदर्शन विचार

  • REGEXP इंडेक्स का उपयोग नहीं कर सकता (पूर्ण टेबल स्कैन)
  • बड़े टेबल्स के लिए, फुलटेक्स्ट खोज (MATCH() AGAINST()) पर विचार करें
  • सरल पैटर्न के लिए LIKE तेज़ है

फुलटेक्स्ट खोज विकल्प (बड़े टेक्स्ट के लिए बेहतर)

-- प्राकृतिक भाषा मोड
SELECT * FROM DemoTable 
WHERE MATCH(Title) AGAINST('John' IN NATURAL LANGUAGE MODE);

-- बूलियन मोड
SELECT * FROM DemoTable 
WHERE MATCH(Title) AGAINST('+John' IN BOOLEAN MODE);
  1. MySQL में विशिष्ट कॉलम नाम वाली टेबल कैसे खोजें MySQL में विशिष्ट कॉलम नाम वाली टेबल कैसे खोजें

    information_schema.columns टेबल को क्वेरी करके डेटाबेस में विशिष्ट कॉलम नाम वाली सभी टेबल खोजें। सिंटैक्स SELECT DISTINCT table_name FROM information_schema.columns WHERE column_name LIKE %yourSearchValue% AND table_schema = DATABASE(); उदाहरण: Client वाली कॉलम खोजना SELECT DISTINCT table_name FR

  1. - MySQL REGEXP में पैरेंथेसिस एस्केप करके पैरेंथेसिस वाले मान खोजें

    MySQL REGEXP में पैरेंथेसिस `(` `)` विशेष मेटा-कैरेक्टर हैं (कैप्चरिंग समूह)। इन्हें शाब्दिक मिलान के लिए बैकस्लैश `\\(` `\\)` या कैरेक्टर क्लास `[(]` `[)]` से एस्केप करें। टेबल बनाएं mysql> CREATE TABLE DemoTable1908 (Code TEXT); डेटा डालें mysql> INSERT INTO DemoTable1908 VALUES(MySQL(1)Da

  1. - MySQL में MM/YY को YYYY-MM-DD में विशिष्ट दिन के साथ कैसे बदलें?

    STR_TO_DATE() + CONCAT() select str_to_date(concat(yourDateValue/, yourColumnName), %d/%m/%y) as anyAliasName from yourTableName; उदाहरण: दिन 24 मानकर insert into demo46(short_date) values(09/18), (12/20), (11/20); क्वेरी और परिणाम select str_to_date(concat(24/, short_date), %d/%m/%y) as Conver