SQL के साथ CAST डेटा-प्रकार रूपांतरणों का उपयोग कैसे करें

एलन जी टेलर द्वारा

आदर्श रूप से, SQL डेटाबेस तालिका के प्रत्येक कॉलम में डेटा प्रकार का सही विकल्प होता है। इस गैर-आदर्श दुनिया में, हालांकि, वास्तव में वह सही विकल्प क्या हो सकता है, यह हमेशा स्पष्ट नहीं होता है। डेटाबेस तालिका को परिभाषित करने में, मान लीजिए कि आप एक कॉलम को डेटा प्रकार असाइन करते हैं जो आपके वर्तमान एप्लिकेशन के लिए पूरी तरह से काम करता है।



मान लीजिए कि बाद में आप अपने एप्लिकेशन के दायरे का विस्तार करना चाहते हैं - या एक पूरी तरह से नया एप्लिकेशन लिखना चाहते हैं जो डेटा का अलग-अलग उपयोग करता है। इस नए उपयोग के लिए आपके द्वारा मूल रूप से चुने गए डेटा प्रकार से भिन्न डेटा प्रकार की आवश्यकता हो सकती है।



आप एक तालिका में एक प्रकार के स्तंभ की तुलना किसी भिन्न तालिका में भिन्न प्रकार के स्तंभ से करना चाह सकते हैं। उदाहरण के लिए, आप दिनांक को एक तालिका में वर्ण डेटा के रूप में और किसी अन्य तालिका में दिनांक डेटा के रूप में संग्रहीत कर सकते हैं।

भले ही दोनों कॉलम में एक ही तरह की जानकारी हो (उदाहरण के लिए तिथियां), तथ्य यह है कि प्रकार भिन्न हैं, आपको तुलना करने से रोक सकते हैं। प्रारंभिक SQL मानकों में, SQL-86 और SQL-89, प्रकार की असंगति ने एक बड़ी समस्या उत्पन्न की। हालाँकि, SQL-92 ने उपयोग में आसान समाधान पेश कियाकास्टअभिव्यक्ति।



कास्टअभिव्यक्ति तालिका डेटा या एक प्रकार के होस्ट चर को दूसरे प्रकार में परिवर्तित करती है। रूपांतरण करने के बाद, आप उस संचालन या विश्लेषण के साथ आगे बढ़ सकते हैं जिसकी आपने मूल रूप से कल्पना की थी।

स्वाभाविक रूप से, आप का उपयोग करते समय कुछ प्रतिबंधों का सामना करना पड़ता हैकास्टअभिव्यक्ति। आप किसी भी प्रकार के डेटा को अंधाधुंध रूप से किसी अन्य प्रकार में परिवर्तित नहीं कर सकते। आप जो डेटा कनवर्ट कर रहे हैं वह नए डेटा प्रकार के साथ संगत होना चाहिए। उदाहरण के लिए, आप उपयोग कर सकते हैंकास्टपरिवर्तित करने के लिएCHAR(10)वर्ण स्ट्रिंग'2007-04-26'तकतारीखप्रकार।

लेकिन आप उपयोग नहीं कर सकतेकास्टपरिवर्तित करने के लिएCHAR(10)वर्ण स्ट्रिंगगैंडातकतारीखप्रकार। आप एक को परिवर्तित नहीं कर सकतेपूर्णांकतकछोटाटाइप करें यदि पूर्व अधिकतम आकार से अधिक है aछोटा.



आप किसी भी वर्ण प्रकार के आइटम को किसी अन्य प्रकार (जैसे संख्यात्मक या दिनांक) में परिवर्तित कर सकते हैं, बशर्ते आइटम का मान नए प्रकार के शाब्दिक रूप में हो। इसके विपरीत, आप किसी भी प्रकार के आइटम को किसी भी प्रकार के वर्ण में परिवर्तित कर सकते हैं, बशर्ते आइटम के मूल्य में मूल प्रकार के अक्षर का रूप हो।

निम्न सूची कुछ अतिरिक्त रूपांतरणों का वर्णन करती है जो आप कर सकते हैं:

  • किसी भी संख्यात्मक प्रकार से किसी अन्य संख्यात्मक प्रकार तक। यदि कम आंशिक रूप से सटीक प्रकार में कनवर्ट किया जाता है, तो सिस्टम परिणाम को गोल या छोटा कर देता है।

  • एकल घटक अंतराल के लिए कोई सटीक संख्यात्मक प्रकार, जैसे suchअंतराल दिवसयाअंतराल सेकंड.

  • कोई भीतारीखकरने के लिएTIMESTAMP. का समय भागTIMESTAMPशून्य से भर देता है।

  • कोई भीसमयकरने के लिएसमयभिन्न भिन्नात्मक-सेकंड परिशुद्धता या a . के साथTIMESTAMP. दिनांक भागTIMESTAMPवर्तमान तिथि के साथ भरता है।

  • कोई भीTIMESTAMPकरने के लिएतारीख, सेवा मेरेसमय, या एTIMESTAMPएक अलग भिन्नात्मक-सेकंड परिशुद्धता के साथ।

  • कोई भी साल-महीनामध्यान्तरएक सटीक संख्यात्मक प्रकार या किसी अन्य वर्ष-महीने के लिएमध्यान्तरविभिन्न अग्रणी-क्षेत्र परिशुद्धता के साथ।

  • कोई भी दिन-समयमध्यान्तरएक सटीक संख्यात्मक प्रकार या किसी अन्य दिन-समय के लिएमध्यान्तरविभिन्न अग्रणी-क्षेत्र परिशुद्धता के साथ।

    सफेद अंडाकार गोली 377

SQL के भीतर CAST का उपयोग कैसे करें

मान लीजिए कि आप एक ऐसी कंपनी के लिए काम करते हैं जो संभावित कर्मचारियों के साथ-साथ उन कर्मचारियों पर भी नज़र रखती है जिन्हें आपने वास्तव में काम पर रखा है। आप संभावित कर्मचारियों को नाम की तालिका में सूचीबद्ध करते हैंआशा, और आप उन्हें उनके सामाजिक सुरक्षा नंबरों से अलग करते हैं, जिन्हें आप a you के रूप में संग्रहीत करते हैंCHAR(9)प्रकार।

आप कर्मचारियों को नाम की तालिका में सूचीबद्ध करते हैंकर्मचारी, और आप उन्हें उनके सामाजिक सुरक्षा नंबरों से अलग करते हैं, जो किपूर्णांकप्रकार। अब आप उन सभी लोगों की सूची बनाना चाहते हैं जो दोनों तालिकाओं में दिखाई देते हैं। आप उपयोग कर सकते हैंकास्टकार्य करने के लिए:

SELECT * FROM EMPLOYEE WHERE EMPLOYEE.SSN = CAST(PROSPECT.SSN AS INTEGER) ;

SQL और होस्ट भाषा के बीच CAST का उपयोग कैसे करें

का प्रमुख उपयोगकास्टडेटा प्रकारों से निपटने के लिए है जो SQL में उपलब्ध हैं लेकिन आपके द्वारा उपयोग की जाने वाली होस्ट भाषा में नहीं हैं। निम्न सूची इन डेटा प्रकारों के कुछ उदाहरण प्रस्तुत करती है:

  • एसक्यूएल हैदशमलवतथासंख्यात्मक, लेकिन फोरट्रान और पास्कल नहीं।

  • एसक्यूएल हैफ्लोटतथाअसली, लेकिन मानक COBOL नहीं है।

  • एसक्यूएल हैदिनांक और समयजो किसी अन्य भाषा में नहीं है।

मान लीजिए कि आप तालिकाओं तक पहुंचने के लिए फोरट्रान या पास्कल का उपयोग करना चाहते हैंदशमलव(5,3)कॉलम, और आप नहीं चाहते कि उन मानों को में परिवर्तित करने के परिणामस्वरूप कोई त्रुटि होअसलीफोरट्रान और पास्कल द्वारा उपयोग किया जाने वाला डेटा प्रकार। आप इस कार्य को उपयोग करके कर सकते हैंकास्टडेटा को कैरेक्टर-स्ट्रिंग होस्ट वेरिएबल्स में और उससे स्थानांतरित करने के लिए।

आप १९८.३७ के एक अंकीय वेतन को a के रूप में पुनः प्राप्त करते हैंCHAR(10)का मूल्य'0000198.37'. फिर, यदि आप उस वेतन को 203.74 पर अपडेट करना चाहते हैं, तो आप उस मान को a . में रख सकते हैंCHAR(10)जैसा'0000203.74'. पहले आप उपयोग करेंकास्टएसक्यूएल बदलने के लिएदशमलव(5,3)करने के लिए डेटा प्रकारCHAR(10)उस कर्मचारी के लिए टाइप करें जिसका आईडी नंबर आप होस्ट वैरिएबल में स्टोर कर रहे हैं: emp_id_var, निम्नलिखित नुसार:

SELECT CAST(Salary AS CHAR(10)) INTO :salary_var FROM EMP WHERE EmpID = :emp_id_var ;

फोरट्रान या पास्कल एप्लिकेशन परिणामी वर्ण-स्ट्रिंग मान की जांच करता है:वेतन_वर, संभवतः स्ट्रिंग को के नए मान पर सेट करता है'000203.74', और फिर निम्न SQL कोड को कॉल करके डेटाबेस को अद्यतन करता है:

UPDATE EMP SET Salary = CAST(:salary_var AS DECIMAL(5,3)) WHERE EmpID = :emp_id_var ;

चरित्र-स्ट्रिंग मानों से निपटना जैसे कि'000198.37'फोरट्रान या पास्कल में अजीब है, लेकिन आप आवश्यक जोड़तोड़ करने के लिए सबरूटीन्स का एक सेट लिख सकते हैं। फिर आप किसी भी होस्ट भाषा से किसी भी SQL डेटा को पुनर्प्राप्त और अपडेट कर सकते हैं, और सटीक मान प्राप्त कर सकते हैं और सेट कर सकते हैं।

सामान्य विचार यह है किकास्टडेटाबेस के भीतर कनवर्ट करने के बजाय होस्ट प्रकार और डेटाबेस के बीच कनवर्ट करने के लिए सबसे मूल्यवान है।

दिलचस्प लेख