MySQL में DATETIME या TIMESTAMP कॉलम से केवल तिथि भाग की तुलना करने के लिए DATE() फ़ंक्शन का उपयोग करें। यह समय घटक को अनदेखा करके केवल तिथि पर फ़िल्टर करने की अनुमति देता है।
सिंटैक्स
SELECT * FROM table_name WHERE DATE(datetime_column) = 'YYYY-MM-DD';
व्यावहारिक उदाहरण
1. टेबल बनाएं और डेटा डालें
mysql> CREATE TABLE DemoTable732 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
PassengerId INT,
PassengerName VARCHAR(100),
PassengerAge INT,
PassengerTravelDatetime DATETIME
);
Query OK, 0 rows affected (0.67 sec)
mysql> INSERT INTO DemoTable732 (PassengerId, PassengerName, PassengerAge, PassengerTravelDatetime) VALUES
(110, 'Chris', 25, '2019-07-23 12:45:56'),
(120, 'Robert', 24, '2019-07-21 11:05:00'),
(120, 'Sam', 26, '2019-07-21 11:05:00');
Query OK, 3 rows affected (0.25 sec)
2. सभी रिकॉर्ड्स देखें
mysql> SELECT * FROM DemoTable732; +----+-------------+---------------+--------------+-------------------------+ | Id | PassengerId | PassengerName | PassengerAge | PassengerTravelDatetime | +----+-------------+---------------+--------------+-------------------------+ | 1 | 110 | Chris | 25 | 2019-07-23 12:45:56 | | 2 | 120 | Robert | 24 | 2019-07-21 11:05:00 | | 3 | 120 | Sam | 26 | 2019-07-21 11:05:00 | +----+-------------+---------------+--------------+-------------------------+ 3 rows in set (0.00 sec)
3. विशिष्ट तिथि पर यात्रा करने वाले यात्रियों की गिनती
mysql> SELECT COUNT(Id) FROM DemoTable732 WHERE PassengerId = 120 AND DATE(PassengerTravelDatetime) = '2019-07-21'; +-----------+ | count(Id) | +-----------+ | 2 | +-----------+ 1 row in set (0.00 sec)
DATE() फ़ंक्शन के अन्य उपयोग
तिथि सीमा
SELECT * FROM DemoTable732 WHERE DATE(PassengerTravelDatetime) BETWEEN '2019-07-20' AND '2019-07-25';
वर्तमान तिथि के सापेक्ष
-- आज WHERE DATE(datetime_col) = CURDATE() -- कल WHERE DATE(datetime_col) = DATE_SUB(CURDATE(), INTERVAL 1 DAY) -- इस सप्ताह WHERE DATE(datetime_col) >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY)
महीना/वर्ष निकालना
SELECT * FROM DemoTable732 WHERE MONTH(PassengerTravelDatetime) = 7 AND YEAR(PassengerTravelDatetime) = 2019;
प्रदर्शन चेतावनी ⚠️
WHERE क्लॉज में DATE() फ़ंक्शन इंडेक्स उपयोग को रोकता है!
बेहतर विकल्प: रेंज क्वेरी
-- इंडेक्स उपयोग करता है (यदि datetime_col पर इंडेक्स है) WHERE datetime_col >= '2019-07-21 00:00:00' AND datetime_col < '2019-07-22 00:00:00' -- या DATE() के साथ जनरेटेड कॉलम (MySQL 5.7+) ALTER TABLE DemoTable732 ADD travel_date DATE AS (DATE(PassengerTravelDatetime)) STORED, ADD INDEX idx_travel_date (travel_date);
सारांश
DATE(datetime)- केवल तिथि भाग निकालता है- सरल क्वेरीज़ के लिए ठीक, बड़े टेबल्स पर प्रदर्शन समस्या
- उत्पादन में रेंज क्वेरी या जनरेटेड कॉलम + इंडेक्स प्राथमिकता दें