समस्या:
आप महीने की संख्या के आधार पर पंक्तियों को क्रमबद्ध करना चाहते हैं, महीने के नाम दिए गए हैं (आप चाहते हैं कि जनवरी पहले दिखाया जाए, आखिरी दिसंबर)।
उदाहरण:
birthday
तालिका में दो कॉलम होते हैं:नाम और birthday_month
. महीनों को नामों में दिया जाता है, संख्याओं में नहीं।p>
नाम | <थ>जन्मदिन_माह|
---|---|
रोनन टीशा | शून्य |
दिसंबर | 2020 |
एंजी जूलिया | अप्रैल |
नरेले डिलन | अप्रैल |
पर्डी केसी | जनवरी |
डोना नेल | शून्य |
ब्लेज़ ग्रीम | अक्टूबर |
आप पंक्तियों को birthday_month
. के अनुसार क्रमित करना चाहते हैं ।
समाधान:
SELECT * FROM birthday ORDER BY STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d');
परिणाम इस तरह दिखता है:
नाम | <थ>जन्मदिन_माह|
---|---|
डोना नेल | शून्य |
पर्डी केसी | जनवरी |
एंजी जूलिया | अप्रैल |
नरेले डिलन | अप्रैल |
ब्लेज़ ग्रीम | अक्टूबर |
रोनन टीशा | शून्य |
दिसंबर | अक्टूबर |
चर्चा:
महीने के हिसाब से ऑर्डर करने के लिए, इस महीने के साथ एक तारीख बनाएं। ऐसा करने के लिए, STR_TO_DATE() फ़ंक्शन का उपयोग करें। यदि आपके पास 'Year Month Day
. में एक स्ट्रिंग के रूप में संग्रहीत दिनांक है ' प्रारूप में, आप इसे STR_TO_DATE(date_string, '%Y %M %d')
का उपयोग करके किसी तिथि पर कास्ट कर सकते हैं ।
सबसे पहले, आपको CONCAT () फ़ंक्शन का उपयोग करके एक स्ट्रिंग बनाने की आवश्यकता है। वर्ष कोई भी वर्ष हो सकता है जो आप चाहते हैं (उदा., 0001
) और वह दिन कोई भी दिन हो सकता है जो आप चाहते हैं (उदा., 01
):
CONCAT('0001 ', birthday_month, ' 01')
CONCAT()
फ़ंक्शन सभी तर्कों को एक स्ट्रिंग में जोड़ता है। स्ट्रिंग 'Year Month Day
. में होनी चाहिए ' प्रारूप, इसलिए दूसरा तर्क होना चाहिए birthday_month
; पहला और तीसरा तर्क बस सही प्रारूप में होना चाहिए।
फिर, आपको STR_TO_DATE(date_string, '%Y %M %d')
का उपयोग करके इस स्ट्रिंग को दिनांक में बदलने की आवश्यकता है। समारोह। इस फ़ंक्शन का दूसरा तर्क दिनांक का प्रारूप है। %Y
वर्ष के लिए खड़ा है, %M
महीने के लिए खड़ा है (इसका पूरा नाम, संख्या नहीं), और %d
दिन के लिए खड़ा है।
STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d')
इसका उपयोग ORDER BY
के साथ करें तिथि के अनुसार पंक्तियों को आरोही क्रम में क्रमबद्ध करने के लिए खंड। यदि आप पंक्तियों को अवरोही क्रम में देखना चाहते हैं, तो बस एक DESC
संलग्न करें कीवर्ड, इस तरह:
SELECT * FROM birthday ORDER BY STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d') DESC;
ध्यान दें कि MySQL में, NULL
आरोही क्रम में छँटाई करते समय s पहले प्रदर्शित होते हैं और अवरोही क्रम में छँटाई करते समय अंतिम होते हैं। साथ ही, समान birthday_month
. वाली पंक्तियां यादृच्छिक क्रम में प्रदर्शित होते हैं (आप देख सकते हैं Angie Julia
तीसरा और Narelle Dillan
चौथा, या Narelle Dillan
तीसरा और Angie Julia
चौथा)।