MySQL में STR_TO_DATE() का उपयोग करके गलत तारीख प्रारूप को सही करना
जब तारीख गलत प्रारूप में VARCHAR कॉलम में संग्रहीत हो (जैसे 'YYYY-DD-MM'), तो STR_TO_DATE() फ़ंक्शन का उपयोग करके इसे सही DATE टाइप में पार्स करें।
उदाहरण के साथ पूर्ण कार्यान्वयन
टेबल बनाना (VARCHAR में गलत प्रारूप)
mysql> CREATE TABLE DemoTable630 (ArrivalDate VARCHAR(100));
रिकॉर्ड डालना (YYYY-DD-MM प्रारूप में)
mysql> INSERT INTO DemoTable630 VALUES('2015-21-01'), ('2018-25-12'), ('2019-15-07'), ('2016-31-03');
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable630;
आउटपुट:
+-------------+
| ArrivalDate |
+-------------+
| 2015-21-01 |
| 2018-25-12 |
| 2019-15-07 |
| 2016-31-03 |
+-------------+
4 rows in set (0.00 sec)
सही DATE में बदलना
mysql> SELECT STR_TO_DATE(ArrivalDate, '%Y-%d-%m') FROM DemoTable630;
आउटपुट:
+-------------------------------------+
| STR_TO_DATE(ArrivalDate, '%Y-%d-%m') |
+-------------------------------------+
| 2015-01-21 |
| 2018-12-25 |
| 2019-07-15 |
| 2016-03-31 |
+-------------------------------------+
4 rows in set (0.00 sec)
प्रारूप विशिष्टकर्ता व्याख्या:
%Y- 4-अंकीय वर्ष (2015)%d- दिन (21, 25, 15, 31)%m- महीना (01, 12, 07, 03)- पैटर्न
'%Y-%d-%m'स्रोत प्रारूप YYYY-DD-MM से मेल खाता है
टेबल में स्थायी रूप से अपडेट करना
-- 1. नया DATE कॉलम जोड़ें
ALTER TABLE DemoTable630 ADD COLUMN ArrivalDateFixed DATE;
-- 2. कनवर्ट करके अपडेट करें
UPDATE DemoTable630
SET ArrivalDateFixed = STR_TO_DATE(ArrivalDate, '%Y-%d-%m');
-- 3. जांचें
SELECT ArrivalDate, ArrivalDateFixed FROM DemoTable630;
-- 4. पुराना कॉलम हटाएं, नए का नाम बदलें
ALTER TABLE DemoTable630 DROP COLUMN ArrivalDate;
ALTER TABLE DemoTable630 CHANGE ArrivalDateFixed ArrivalDate DATE;
आम तारीख प्रारूप और उनके पैटर्न
| स्रोत प्रारूप | उदाहरण | STR_TO_DATE पैटर्न |
|---|---|---|
| YYYY-MM-DD | 2019-07-14 | %Y-%m-%d |
| YYYY-DD-MM | 2019-14-07 | %Y-%d-%m |
| DD/MM/YYYY | 14/07/2019 | %d/%m/%Y |
| MM/DD/YYYY | 07/14/2019 | %m/%d/%Y |
| DD-MON-YYYY | 14-Jul-2019 | %d-%b-%Y |
| YYYYMMDD | 20190714 | %Y%m%d |
अमान्य तारीख संभालना
SELECT STR_TO_DATE('2019-31-02', '%Y-%d-%m'); -- NULL लौटाता है (31 फरवरी अमान्य)
SELECT STR_TO_DATE('invalid', '%Y-%m-%d'); -- NULL लौटाता है
अमान्य तारीखों को पहचानने के लिए:
SELECT * FROM DemoTable630
WHERE STR_TO_DATE(ArrivalDate, '%Y-%d-%m') IS NULL
AND ArrivalDate IS NOT NULL;
सर्वोत्तम अभ्यास
- तारीख के लिए हमेशा
DATE,DATETIME,TIMESTAMPटाइप उपयोग करें - स्ट्रिंग (VARCHAR) में तारीख संग्रहीत न करें
- एप्लिकेशन लेयर पर वैधता जांच करें