MySQL में REGEXP का उपयोग करके ऐसे पैटर्न मिलान करना जहां एक संख्या के बाद वैकल्पिक रूप से अन्य अंक आ सकते हैं (लाइन एंड या गैर-अंक के बाद समाप्त), नकारात्मक लुकअहेड/लुकबिहाइंड पैटर्न का उपयोग करें।
समस्या
EMPLOYEE:100 से मिलान करना है लेकिन EMPLOYEE:100 23432 से नहीं (जहां 100 के तुरंत बाद अंक आते हैं)।
समाधान: नकारात्मक वर्ण वर्ग
SELECT * FROM table_name WHERE column REGEXP 'PATTERN([^0-9]|$)';
व्यावहारिक उदाहरण
1. टेबल बनाएं और डेटा डालें
mysql> CREATE TABLE DemoTable (EmployeeCode VARCHAR(100));
Query OK, 0 rows affected (0.56 sec)
mysql> INSERT INTO DemoTable VALUES
('EMPLOYEE:100 John Smith'),
('EMPLOYEE:16537 Chris Brown'),
('EMPLOYEE:100 David Miller'),
('EMPLOYEE:100 23432 David Miller');
Query OK, 4 rows affected (0.15 sec)
2. सभी रिकॉर्ड्स देखें
mysql> SELECT * FROM DemoTable; +---------------------------------+ | EmployeeCode | +---------------------------------+ | EMPLOYEE:100 John Smith | | EMPLOYEE:16537 Chris Brown | | EMPLOYEE:100 David Miller | | EMPLOYEE:100 23432 David Miller | +---------------------------------+ 4 rows in set (0.00 sec)
3. पैटर्न मिलान: EMPLOYEE:100 के बाद गैर-अंक या अंत
mysql> SELECT * FROM DemoTable WHERE EmployeeCode REGEXP 'EMPLOYEE:100([^0-9]|$)'; +---------------------------------+ | EmployeeCode | +---------------------------------+ | EMPLOYEE:100 John Smith | | EMPLOYEE:100 David Miller | | EMPLOYEE:100 23432 David Miller | -- नोट: यह भी मिलता है! +---------------------------------+ 3 rows in set (0.00 sec)
पैटर्न व्याख्या
'EMPLOYEE:100([^0-9]|$)' EMPLOYEE:100 -- शाब्दिक स्ट्रिंग मिलान ( -- समूह शुरू [^0-9] -- कोई भी गैर-अंक वर्ण (स्पेस, अक्षर, आदि) | -- या $ -- स्ट्रिंग अंत ) -- समूह अंत
महत्वपूर्ण अवलोकन
तीसरी पंक्ति EMPLOYEE:100 23432 David Miller **मिलती है** क्योंकि 100 के बाद स्पेस है (जो [^0-9] से मेल खाता है)। यदि आप 100 के बाद **कुछ भी नहीं** (या केवल गैर-अंक/गैर-स्पेस) चाहते हैं, तो पैटर्न समायोजित करें।
सख्त पैटर्न: 100 के बाद केवल स्पेस/अक्षर/अंत
-- 100 के बाद स्पेस फिर अक्षर या अंत WHERE EmployeeCode REGEXP 'EMPLOYEE:100( [A-Za-z]|$)';
MySQL 8.0+ में लुकअराउंड (सीमित)
MySQL REGEXP पूर्ण PCRE लुकअराउंड ((?!...), (?) का समर्थन नहीं करता। विकल्प:
- नकारात्मक वर्ण वर्ग
[^...]उपयोग करें (ऊपर दिखाया गया) - एप्लिकेशन लेयर पर फिल्टर करें
- जनरेटेड कॉलम में पार्स किया गया मान स्टोर करें
सामान्य REGEXP पैटर्न
| पैटर्न | मिलान |
|---|---|
^abc$ | सटीक 'abc' |
^abc | 'abc' से शुरू |
abc$ | 'abc' पर समाप्त |
[0-9] | कोई अंक |
[^0-9] | कोई गैर-अंक |
abc|def | 'abc' या 'def' |
(abc)+ | 'abc' एक या अधिक बार |