MySQL में जब तारीख VARCHAR कॉलम में 'dd/mm/yyyy' फॉर्मेट में स्टोर हो, तो STR_TO_DATE() के साथ YEAR() फंक्शन का उपयोग करके विशिष्ट वर्ष के रिकॉर्ड अपडेट करें।
उदाहरण: 2010 में जॉइनिंग वाले यूज़र्स का नाम बदलना
डेमो टेबल बनाएं (तारीख VARCHAR में):
mysql> CREATE TABLE DemoTable1924 (
UserName VARCHAR(20),
UserJoiningDate VARCHAR(40)
);
डेटा इन्सर्ट करें:
mysql> INSERT INTO DemoTable1924 VALUES
('Chris', '10/12/2010'),
('David', '20/01/2011'),
('Mike', '20/01/2010'),
('Carol', '26/04/2013');
अपडेट से पहले:
+----------+-----------------+ | UserName | UserJoiningDate | +----------+-----------------+ | Chris | 10/12/2010 | | David | 20/01/2011 | | Mike | 20/01/2010 | | Carol | 26/04/2013 | +----------+-----------------+
वर्ष 2010 के रिकॉर्ड्स के लिए नाम 'Robert' सेट करें:
mysql> UPDATE DemoTable1924 SET UserName = 'Robert' WHERE YEAR(STR_TO_DATE(UserJoiningDate, '%d/%m/%Y')) = 2010;
अपडेट के बाद:
+----------+-----------------+ | UserName | UserJoiningDate | +----------+-----------------+ | Robert | 10/12/2010 | | David | 20/01/2011 | | Robert | 20/01/2010 | | Carol | 26/04/2013 | +----------+-----------------+
फंक्शन व्याख्या
STR_TO_DATE(str, format): स्ट्रिंग को फॉर्मेट के अनुसार DATE में पार्स करता है%d: दिन (01-31),%m: महीना (01-12),%Y: 4-अंकीय वर्षYEAR(date): DATE/DATETIME से वर्ष निकालता है
सामान्य दिनांक फॉर्मेट
| फॉर्मेट स्ट्रिंग | उदाहरण | पैटर्न |
|---|---|---|
| '%d/%m/%Y' | 10/12/2010 | दिन/महीना/वर्ष |
| '%Y-%m-%d' | 2010-12-10 | ISO मानक |
| '%m/%d/%Y' | 12/10/2010 | US फॉर्मेट |
| '%d-%m-%Y' | 10-12-2010 | हाइफ़न सेपरेटर |
बेहतर दृष्टिकोण: DATE/DATETIME कॉलम उपयोग करें
स्ट्रिंग में तारीख स्टोर करने के बजाय, उचित DATE या DATETIME कॉलम उपयोग करें:
ALTER TABLE DemoTable1924 MODIFY UserJoiningDate DATE; -- डेटा माइग्रेशन के बाद -- तब क्वेरी सरल हो जाती है: UPDATE DemoTable1924 SET UserName = 'Robert' WHERE YEAR(UserJoiningDate) = 2010;
लाभ
- इंडेक्स उपयोग संभव (स्ट्रिंग पर YEAR() इंडेक्स उपयोग नहीं कर सकता)
- डेटा इंटीग्रिटी (अमान्य तारीख अस्वीकार)
- बिल्ट-इन फंक्शन (DATEDIFF, DATE_ADD, आदि)
- स्टोरेज दक्षता
स्ट्रिंग तारीख कॉलम पर फंक्शन लागू करने से इंडेक्स उपयोग अक्षम हो जाता है; बड़े टेबल्स पर पहले कन्वर्ट करें।