MySQL में किसी DATE/DATETIME कॉलम से सप्ताह के दिन का नाम (जैसे Monday, Tuesday) प्राप्त करने के लिए DAYNAME() फंक्शन का उपयोग करें। यह रिपोर्टिंग, शेड्यूलिंग, और दिन-आधारित विश्लेषण के लिए उपयोगी है।
उदाहरण: ShippingDate से दिन नाम
डेमो टेबल बनाएं:
mysql> CREATE TABLE DemoTable1954 (ShippingDate DATE);
डेटा इन्सर्ट करें:
mysql> INSERT INTO DemoTable1954 VALUES
('2019-12-15'), ('2018-04-11'), ('2019-01-31'), ('2016-10-01');
क्वेरी:
mysql> SELECT DAYNAME(ShippingDate) AS Day FROM DemoTable1954;
आउटपुट:
+-----------+ | Day | +-----------+ | Sunday | | Wednesday | | Thursday | | Saturday | +-----------+
संबंधित दिनांक फंक्शन
| फंक्शन | वापसी | उदाहरण (2019-12-15) |
|---|---|---|
| DAYNAME() | दिन नाम | Sunday |
| DAYOFWEEK() | दिन संख्या (1=रविवार) | 1 |
| WEEKDAY() | दिन सूचकांक (0=सोमवार) | 6 |
| DAYOFMONTH() | महीने का दिन | 15 |
| DAYOFYEAR() | वर्ष का दिन | 349 |
| MONTHNAME() | महीना नाम | December |
| QUARTER() | तिमाही (1-4) | 4 |
भाषा/लोकेल
- दिन नाम सर्वर की
lc_time_namesसिस्टम वेरिएबल पर निर्भर करते हैं - डिफ़ॉल्ट: अंग्रेजी (en_US)
- बदलें:
SET lc_time_names = 'hi_IN';→ रविवार, सोमवार,... - सत्र के लिए:
SET SESSION lc_time_names = 'hi_IN';
उपयोग के मामले
-- सप्ताहांत पहचान
SELECT * FROM orders
WHERE DAYNAME(order_date) IN ('Saturday', 'Sunday');
-- दिन के अनुसार ग्रुपिंग
SELECT DAYNAME(created_at) AS day, COUNT(*) AS orders
FROM orders
GROUP BY DAYNAME(created_at)
ORDER BY FIELD(day, 'Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday');
-- व्यावसायिक दिन फ़िल्टर
WHERE DAYOFWEEK(date) BETWEEN 2 AND 6 -- सोम-शुक्र
प्रदर्शन
DAYNAME()इंडेक्स उपयोग नहीं रोकता (WHERE में उपयोग न होने पर)- WHERE क्लॉज़ में
DAYNAME(date) = 'Monday'इंडेक्स उपयोग नहीं कर सकता - बेहतर: रेंज क्वेरी या जनरेटेड कॉलम + इंडेक्स
जनरेटेड कॉलम विकल्प (MySQL 5.7+)
ALTER TABLE orders ADD COLUMN day_name VARCHAR(10) GENERATED ALWAYS AS (DAYNAME(order_date)) STORED, ADD INDEX idx_day_name (day_name);
तब: WHERE day_name = 'Monday' - इंडेक्स उपयोग करेगा।