MySQL में कुछ तारीख फ़ंक्शन हैं जो एक दिन का नाम या महीने का नाम लौटाते हैं। विशेष रूप से, मैं DATE_FORMAT()
. की बात कर रहा हूं , DAYNAME()
, और MONTHNAME()
कार्य। ये नवंबर . का मान लौटा सकते हैं , या सोमवार , उपयोग की जा रही क्वेरी के आधार पर। लेकिन यदि आवश्यक हो तो परिणाम किसी अन्य भाषा में आसानी से लौटाए जा सकते हैं।
ये फ़ंक्शन अपने रिटर्न वैल्यू के लिए जिस भाषा का उपयोग करते हैं, वह lc_time_names
. से ली गई है सिस्टम चर। आप इस वेरिएबल का मान देख सकते हैं या इसका SESSION
सेट कर सकते हैं मान ताकि इन कार्यों के परिणाम वांछित भाषा/स्थान में हों।
स्थानीय नामों में इंटरनेट असाइन्ड नंबर्स अथॉरिटी (IANA) द्वारा सूचीबद्ध भाषा और क्षेत्र सबटैग होते हैं। उदाहरणों में शामिल हैं en_US
अंग्रेज़ी - संयुक्त राज्य अमेरिका . के लिए , en_NZ
अंग्रेज़ी-न्यूज़ीलैंड . के लिए , या es_PA
स्पेनिश - पनामा . के लिए , आदि (MySQL द्वारा समर्थित स्थानों की सूची के लिए, MySQL में स्थानों की पूरी सूची देखें)।
इस लेख में, मैं आपको दिखाऊंगा कि अपने कनेक्शन के लिए वर्तमान स्थान कैसे खोजें, इसे बदलें, और फिर देखें कि यह किसी क्वेरी के परिणामों को कैसे प्रभावित करता है। मैं आपको एक ऐसा फ़ंक्शन भी दिखाता हूं जो इस सेटिंग से प्रतिरक्षित है (लेकिन चिंता न करें, यह फ़ंक्शन आपको स्थान निर्दिष्ट करने की अनुमति देता है)।
वर्तमान स्थान देखें
सबसे पहले, आइए देखें कि lc_time_names
. का वर्तमान मान क्या है? सिस्टम चर।
SELECT @@lc_time_names;
परिणाम:
+-----------------+ | @@lc_time_names | +-----------------+ | en_US | +-----------------+
तो मेरा वर्तमान स्थान en_US
है . आपके सिस्टम की स्थानीय सेटिंग पर ध्यान दिए बिना यह वास्तव में डिफ़ॉल्ट मान है (लेकिन इसे सर्वर स्टार्टअप पर या GLOBAL
सेट करके बदला जा सकता है मूल्य)।
स्थान बदलें
अब लोकेल बदलते हैं और परिणाम देखते हैं।
SET lc_time_names = 'de_BE'; SELECT @@lc_time_names;
परिणाम:
+-----------------+ | @@lc_time_names | +-----------------+ | de_BE | +-----------------+
इस मामले में, मैंने लोकेल को de_BE
. में बदल दिया है , जो जर्मन - बेल्जियम . के लिए है ।
उपयोग का उदाहरण
यहां एक उदाहरण दिया गया है जहां मैं लोकेल सेट करता हूं, फिर एक क्वेरी चलाता हूं जो एक महीने का नाम देता है। मैं फिर लोकेल को एक अलग मान पर सेट करता हूं, फिर उसी क्वेरी को फिर से चलाता हूं।
पहला स्थान:अंग्रेज़ी - संयुक्त राज्य
SET lc_time_names = 'en_US'; SELECT MONTHNAME('1999-10-03');
परिणाम:
+-------------------------+ | MONTHNAME('1999-10-03') | +-------------------------+ | October | +-------------------------+
दूसरा स्थान:स्पैनिश - स्पेन
SET lc_time_names = 'es_ES'; SELECT MONTHNAME('1999-10-03');
परिणाम:
+-------------------------+ | MONTHNAME('1999-10-03') | +-------------------------+ | October | +-------------------------+
फॉर्मेट () फंक्शन
lc_time_names
. का मान FORMAT()
. को प्रभावित नहीं करता है फ़ंक्शन, लेकिन यह फ़ंक्शन एक तीसरा तर्क स्वीकार करता है जो आपको लोकेल निर्दिष्ट करने की अनुमति देता है। मेरे कहने का एक उदाहरण यहां दिया गया है।
SET lc_time_names = 'de_DE'; SELECT FORMAT(1234, 0), FORMAT(1234, 0, 'de_DE');
परिणाम:
+-----------------+--------------------------+ | FORMAT(1234, 0) | FORMAT(1234, 0, 'de_DE') | +-----------------+--------------------------+ | 1,234 | 1.234 | +-----------------+--------------------------+
इसलिए भले ही मैंने lc_time_names
set सेट किया हो से de_DE
सबसे पहले, FORMAT()
. के लिए आरंभिक कॉल उस पर ध्यान नहीं दिया। जब मैंने दूसरी बार फ़ंक्शन को कॉल किया, तो मैंने स्पष्ट रूप से उसी भाषा/लोकेल को तीसरे तर्क के रूप में निर्दिष्ट किया, और यह काम कर गया।