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

MySQL में CURDATE के साथ CONTAINS() का उपयोग कैसे करें? (CONCAT + LIKE का उपयोग करें)

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हाँतेज़शब्द-आधारित

सर्वोत्तम अभ्यास

  1. सटीक मिलान के लिए: = या IN() उपयोग करें
  2. प्रीफिक्स मिलान के लिए: LIKE 'prefix%' (इंडेक्स का उपयोग करता है)
  3. कहीं भी उपस्ट्रिंग के लिए: LIKE '%substr%' (पूर्ण स्कैन)
  4. बड़े टेक्स्ट खोज के लिए: FULLTEXT इंडेक्स + MATCH() AGAINST() उपयोग करें
  5. तिथि भागों के लिए: तिथि कॉलम पर 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());
  1. - MySQL में WITH ROLLUP का सही उपयोग कैसे करें

    WITH ROLLUP के साथ योग और कुल योग प्राप्त करना WITH ROLLUP का सिंटैक्स: select yourColumnName1, sum(yourColumnName2) from yourTableName group by yourColumnName1 with rollup; पहले टेबल बनाएं: create table DemoTable1622 ( EmployeeCountryName varchar(20), EmployeeSalary int ); Query OK, 0 rows affecte

  1. - MySQL क्वेरी में COUNT के साथ CASE शर्त का उपयोग कैसे करें

    COUNT() के अंदर CASE WHEN का उपयोग करके सशर्त गिनती MySQL में इसके लिए CASE WHEN का उपयोग करें और COUNT() मेथड के अंदर CASE शर्त सेट करें। पहले टेबल बनाएं: create table DemoTable1374 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Score int ); Query OK, 0 rows affected (0.61 sec) रि

  1. - MySQL VIEW में WHERE क्लॉज का उपयोग कैसे करें?

    MySQL VIEW पर WHERE क्लॉज लागू करना MySQL VIEW एक आभासी टेबल है जो एक SELECT क्वेरी के परिणाम सेट पर आधारित होती है। आप किसी भी नियमित टेबल की तरह VIEW पर WHERE क्लॉज लागू करके परिणामों को फ़िल्टर कर सकते हैं। उदाहरण: छात्र VIEW बनाना और फ़िल्टर करना पहले एक छात्र टेबल बनाते हैं: SELECT * FROM Dem