MySQL में CONTAINS() नहीं है - CONCAT() और LIKE का उपयोग करें
MySQL में CONTAINS() फ़ंक्शन नहीं है (यह SQL Server/Full-text खोज में मौजूद है)। स्ट्रिंग में उपस्ट्रिंग खोजने के लिए, LIKE ऑपरेटर के साथ CONCAT() का उपयोग करके डायनामिक पैटर्न बनाएं।
वर्तमान तिथि जांचना
mysql> SELECT CURDATE();
+------------+
| curdate() |
+------------+
| 2019-11-28 |
+------------+
1 row in set (0.00 sec)
टेबल बनाना
mysql> CREATE TABLE DemoTable1803 (
-> Name VARCHAR(20),
-> JoiningYear VARCHAR(20)
-> );
Query OK, 0 rows affected (0.00 sec)
डेटा डालना (साल स्लैश से अलग)
mysql> INSERT INTO DemoTable1803 VALUES ('Chris', '2020/2017');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1803 VALUES ('David', '2017/2018');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1803 VALUES ('Adam', '2018/2019');
Query OK, 1 row affected (0.00 sec)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable1803;
+-------+-------------+
| Name | JoiningYear |
+-------+-------------+
| Chris | 2020/2017 |
| David | 2017/2018 |
| Adam | 2018/2019 |
+-------+-------------+
3 rows in set (0.00 sec)
वर्तमान वर्ष वाली पंक्तियाँ खोजने का क्वेरी
mysql> SELECT * FROM DemoTable1803
-> WHERE JoiningYear LIKE CONCAT('%', YEAR(CURDATE()), '%');
परिणाम (2019 में चलाने पर)
+------+-------------+
| Name | JoiningYear |
+------+-------------+
| Adam | 2018/2019 |
+------+-------------+
1 row in set (0.00 sec)
क्वेरी विश्लेषण
YEAR(CURDATE()): वर्तमान वर्ष निकालता है (2019)CONCAT('%', 2019, '%'): पैटर्न '%2019%' बनाता हैLIKE '%2019%': '2019' कहीं भी होने वाली स्ट्रिंग्स से मेल खाता है
स्ट्रिंग खोज के अन्य तरीके
1. LOCATE() / POSITION()
WHERE LOCATE('2019', JoiningYear) > 0
WHERE POSITION('2019' IN JoiningYear) > 0
2. INSTR()
WHERE INSTR(JoiningYear, '2019') > 0
3. REGEXP
WHERE JoiningYear REGEXP '2019'
4. FIND_IN_SET() (कॉमा-अलग मानों के लिए)
WHERE FIND_IN_SET('2019', REPLACE(JoiningYear, '/', ',')) > 0
प्रदर्शन तुलना
| विधि | इंडेक्स उपयोग | गति | लचीलापन |
|---|---|---|---|
| LIKE 'prefix%' | हाँ | तेज़ | प्रीफिक्स केवल |
| LIKE '%substr%' | नहीं | धीमा | कहीं भी |
| REGEXP | नहीं | धीमा | उच्च (पैटर्न) |
| FULLTEXT | हाँ | तेज़ | शब्द-आधारित |
सर्वोत्तम अभ्यास
- सटीक मिलान के लिए:
=याIN()उपयोग करें - प्रीफिक्स मिलान के लिए:
LIKE 'prefix%'(इंडेक्स का उपयोग करता है) - कहीं भी उपस्ट्रिंग के लिए:
LIKE '%substr%'(पूर्ण स्कैन) - बड़े टेक्स्ट खोज के लिए:
FULLTEXTइंडेक्स +MATCH() AGAINST()उपयोग करें - तिथि भागों के लिए: तिथि कॉलम पर
YEAR(),MONTH()फ़ंक्शन का उपयोग करें
बेहतर डिज़ाइन: तिथि भागों को अलग कॉलम में संग्रहीत करें
ALTER TABLE DemoTable1803
ADD COLUMN JoinYear INT,
ADD COLUMN JoinYear2 INT;
UPDATE DemoTable1803
SET JoinYear = SUBSTRING_INDEX(JoiningYear, '/', 1),
JoinYear2 = SUBSTRING_INDEX(JoiningYear, '/', -1);
-- फिर इंडेक्स के साथ कुशल क्वेरी:
SELECT * FROM DemoTable1803 WHERE JoinYear = YEAR(CURDATE()) OR JoinYear2 = YEAR(CURDATE());