समस्या
MySQL में DATE_FORMAT(NULL, ...) NULL लौटाता है, लेकिन कभी-कभी स्पष्ट नियंत्रण या अलग डिफ़ॉल्ट मान की आवश्यकता होती है।
समाधान: IF() फ़ंक्शन के साथ सशर्त फॉर्मेटिंग
IF() का उपयोग करके NULL मान की जांच करें और तदनुसार संभालें।
सिंटैक्स
SELECT IF(yourDateColumn, DATE_FORMAT(yourDateColumn, '%d/%m/%Y'), NULL) FROM yourTableName;
व्यावहारिक उदाहरण
टेबल बनाना और NULL सहित डेटा डालना
mysql> CREATE TABLE returnNullWhenInputIsNullDemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ShippingDate DATETIME
-> );
mysql> INSERT INTO returnNullWhenInputIsNullDemo(ShippingDate) VALUES
-> ('2019-01-21'), (NULL), ('2018-03-25'), (NULL), (NULL),
-> ('2012-04-23'), ('2018-12-01'), ('2016-11-13');
मूल डेटा (8 पंक्तियाँ, 3 NULL)
| Id | ShippingDate |
|---|---|
| 1 | 2019-01-21 00:00:00 |
| 2 | NULL |
| 3 | 2018-03-25 00:00:00 |
| 4 | NULL |
| 5 | NULL |
| 6 | 2012-04-23 00:00:00 |
| 7 | 2018-12-01 00:00:00 |
| 8 | 2016-11-13 00:00:00 |
IF के साथ क्वेरी
mysql> SELECT IF(ShippingDate, DATE_FORMAT(ShippingDate, '%d/%m/%Y'), NULL)
-> FROM returnNullWhenInputIsNullDemo;
परिणाम
+-------------------------------------------------------------+ | IF(ShippingDate, DATE_FORMAT(ShippingDate, '%d/%m/%Y'), NULL) | +-------------------------------------------------------------+ | 21/01/2019 | | NULL | | 25/03/2018 | | NULL | | NULL | | 23/04/2012 | | 01/12/2018 | | 13/11/2016 | +-------------------------------------------------------------+
व्याख्या
IF(condition, true_value, false_value)ShippingDateशर्त के रूप में: NULL = FALSE, गैर-NULL = TRUE- सत्य: DATE_FORMAT लागू करें
- असत्य: NULL लौटाएं
वैकल्पिक दृष्टिकोण
COALESCE (पहला गैर-NULL)
SELECT COALESCE(DATE_FORMAT(ShippingDate, '%d/%m/%Y'), 'N/A') FROM returnNullWhenInputIsNullDemo;
NULL के बजाय 'N/A' दिखाता है।
CASE WHEN
SELECT CASE
WHEN ShippingDate IS NULL THEN NULL
ELSE DATE_FORMAT(ShippingDate, '%d/%m/%Y')
END FROM returnNullWhenInputIsNullDemo;
IFNULL (MySQL-विशिष्ट)
SELECT IFNULL(DATE_FORMAT(ShippingDate, '%d/%m/%Y'), 'No Date') FROM returnNullWhenInputIsNullDemo;
DATE_FORMAT और NULL का व्यवहार
SELECT DATE_FORMAT(NULL, '%d/%m/%Y'); -- NULL लौटाता है
SELECT DATE_FORMAT('2019-01-21', '%d/%m/%Y'); -- '21/01/2019' लौटाता है
वास्तव में, DATE_FORMAT स्वचालित रूप से NULL को संभालता है। IF का उपयोग तब करें जब आप:
- NULL के बजाय कस्टम डिफ़ॉल्ट चाहते हैं
- स्पष्ट नियंत्रण/पठनीयता चाहते हैं
- जटिल शर्तीय तर्क है
सर्वोत्तम अभ्यास
- एप्लिकेशन कोड में NULL संभालें (SQL में नहीं)
- रिपोर्टिंग के लिए COALESCE/IFNULL का उपयोग करें
- इंडेक्स: DATE कॉलम पर इंडेक्स DATE_FORMAT के साथ काम नहीं करेगा