MySQL में STR_TO_DATE() का उपयोग करके VARCHAR तारीखों पर BETWEEN खोज
जब तारीखें VARCHAR में संग्रहीत होती हैं (जैसे '6/28/2011 9:58 AM'), तो STR_TO_DATE() से उन्हें DATE में बदलकर BETWEEN का उपयोग करें।
सिंटैक्स
SELECT * FROM yourTableName
WHERE STR_TO_DATE(LEFT(yourColumnName, LOCATE(' ', yourColumnName)), '%m/%d/%Y')
BETWEEN 'startDate' AND 'endDate';
उदाहरण
टेबल बनाएं:
mysql> create table SearchDateAsVarchar (
-> Id int NOT NULL AUTO_INCREMENT,
-> ShippingDate varchar(100),
-> PRIMARY KEY(Id)
-> );
डेटा डालें:
mysql> insert into SearchDateAsVarchar(ShippingDate) values('6/28/2011 9:58 AM');
mysql> insert into SearchDateAsVarchar(ShippingDate) values('6/18/2011 10:50:39 AM');
mysql> insert into SearchDateAsVarchar(ShippingDate) values('6/22/2011 11:45:40 AM');
20 जून से 28 जून 2011 के बीच खोजें:
mysql> select * from SearchDateAsVarchar
-> where STR_TO_DATE(LEFT(ShippingDate, LOCATE(' ', ShippingDate)), '%m/%d/%Y')
-> BETWEEN '2011-06-20' AND '2011-06-28';
परिणाम:
+----+-----------------------+ | Id | ShippingDate | +----+-----------------------+ | 1 | 6/28/2011 9:58 AM | | 3 | 6/22/2011 11:45:40 AM | +----+-----------------------+
व्याख्या
LOCATE(' ', ShippingDate): पहले स्पेस की स्थिति (समय से पहले)LEFT(..., pos): केवल दिनांक भाग निकालता है ('6/28/2011')STR_TO_DATE(..., '%m/%d/%Y'): स्ट्रिंग को DATE में बदलता हैBETWEEN '2011-06-20' AND '2011-06-28': दिनांक सीमा फ़िल्टर
सामान्य दिनांक फॉर्मेट
| फॉर्मेट | उदाहरण | STR_TO_DATE पैटर्न |
|---|---|---|
| MM/DD/YYYY | 6/28/2011 | %m/%d/%Y |
| DD-MM-YYYY | 28-06-2011 | %d-%m-%Y |
| YYYY-MM-DD | 2011-06-28 | %Y-%m-%d |
| DD/MM/YYYY | 28/06/2011 | %d/%m/%Y |
सिफारिश
तारीखों के लिए हमेशा DATE, DATETIME, या TIMESTAMP डेटा प्रकार का उपयोग करें। VARCHAR में तारीख संग्रहीत करने से बचें।