SQL सर्वर 2017 से शुरू करके, अब आप T-SQL TRANSLATE()
. का उपयोग कर सकते हैं वर्णों के दूसरे सेट में एक या अधिक वर्णों का अनुवाद करने के लिए कार्य करता है।
पहली नज़र में, आप सोच सकते हैं कि TRANSLATE()
फ़ंक्शन ठीक वैसा ही काम करता है जैसे REPLACE()
कार्य करते हैं, लेकिन दोनों के बीच महत्वपूर्ण अंतर हैं।
परिभाषाएं
सबसे पहले, आइए प्रत्येक फ़ंक्शन की परिभाषा देखें:
REPLACE()
- एक निर्दिष्ट स्ट्रिंग मान की सभी आवृत्तियों को दूसरे स्ट्रिंग मान से बदल देता है।
TRANSLATE()
- दूसरे तर्क में निर्दिष्ट कुछ वर्णों के वर्णों के गंतव्य सेट में अनुवाद किए जाने के बाद पहले तर्क के रूप में प्रदान की गई स्ट्रिंग लौटाता है।
मुख्य अंतर यह है कि प्रत्येक फ़ंक्शन एकाधिक वर्णों से कैसे निपटता है। REPLACE()
एक स्ट्रिंग को दूसरी स्ट्रिंग से बदल देता है। इसलिए, यदि एक स्ट्रिंग में कई वर्ण हैं, तो प्रत्येक वर्ण समान क्रम में होना चाहिए। TRANSLATE()
दूसरी ओर, उन वर्णों के क्रम की परवाह किए बिना, प्रत्येक वर्ण को एक-एक करके बदल देता है।
उदाहरण - समान परिणाम
ऐसे कुछ मामले हैं जहां दोनों कार्य एक ही परिणाम लौटाएंगे। इस तरह:
SELECT REPLACE('123', '123', '456') AS Replace, TRANSLATE('123', '123', '456') AS Translate;
परिणाम:
Replace Translate ------- --------- 456 456
इस मामले में, REPLACE()
रिटर्न 456
क्योंकि दूसरे तर्क में सटीक स्ट्रिंग पहले तर्क में एक स्ट्रिंग से मेल खाती है (इस मामले में, यह पूरी स्ट्रिंग थी)।
TRANSLATE()
रिटर्न 456
क्योंकि दूसरे तर्क में प्रत्येक वर्ण पहले तर्क में मौजूद है।
उदाहरण - भिन्न परिणाम
अब एक उदाहरण के लिए जो TRANSLATE()
. के बीच के अंतरों में से एक को प्रदर्शित करता है और REPLACE()
:
SELECT REPLACE('123', '321', '456') AS Replace, TRANSLATE('123', '321', '456') AS Translate;
परिणाम:
Replace Translate ------- --------- 123 654
इस मामले में, REPLACE()
इसका कोई प्रभाव नहीं है (यह मूल स्ट्रिंग देता है) क्योंकि दूसरा तर्क पहले तर्क (या इसके भीतर एक सबस्ट्रिंग) के लिए सटीक मिलान नहीं है। भले ही दूसरे तर्क में सही वर्ण हों, लेकिन वे पहले तर्क के समान क्रम में नहीं हैं, और इसलिए, पूरी स्ट्रिंग मेल नहीं खाती।
TRANSLATE()
करता है एक प्रभाव है क्योंकि दूसरे तर्क में प्रत्येक वर्ण पहले तर्क में मौजूद है। इससे कोई फर्क नहीं पड़ता कि वे एक अलग क्रम में हैं, क्योंकि प्रत्येक चरित्र का एक-एक करके अनुवाद किया जाता है। SQL सर्वर पहले अक्षर का अनुवाद करता है, फिर दूसरे, फिर तीसरे, और इसी तरह।
गैर-सन्निहित स्ट्रिंग्स
पिछले उदाहरण के समान, आप भी अलग-अलग परिणाम प्राप्त कर सकते हैं जब पहले तर्क में दूसरे तर्क में वर्ण होते हैं, लेकिन वे गैर-सन्निहित होते हैं:
SELECT REPLACE('1car23', '123', '456') AS Replace, TRANSLATE('1car23', '123', '456') AS Translate;
परिणाम:
Replace Translate ------- --------- 1car23 4car56
विभिन्न लंबाई के तर्क
जब भी विभिन्न तर्कों में वर्णों की संख्या में विसंगतियां हों, तो आपको प्रत्येक फ़ंक्शन के बीच अलग-अलग परिणाम भी मिल सकते हैं।
यहां एक उदाहरण दिया गया है जहां पहले तर्क में दूसरे और तीसरे तर्क की तुलना में कम वर्ण हैं:
SELECT REPLACE('123', '1234', '4567') AS Replace, TRANSLATE('123', '1234', '4567') AS Translate;
परिणाम:
Replace Translate ------- --------- 123 456
इस मामले में, REPLACE()
इसका कोई प्रभाव नहीं है क्योंकि दूसरे तर्क में पहले तर्क की तुलना में अधिक वर्ण हैं। इसलिए, पहले तर्क में दूसरे तर्क को शामिल करना असंभव है।
TRANSLATE()
हालांकि, इस मामले में कार्य का प्रभाव पड़ता है। ऐसा इसलिए है क्योंकि दूसरे तर्क में ऐसे वर्ण हैं जो पहले तर्क में हैं। इससे कोई फर्क नहीं पड़ता कि दूसरे तर्क में पहले की तुलना में अधिक वर्ण हैं। सबसे महत्वपूर्ण बात यह है कि तीसरे तर्क में दूसरे के समान ही वर्णों की संख्या होती है।
ऐसे मामले भी होते हैं जब REPLACE()
पूरी तरह से काम करता है लेकिन TRANSLATE()
एक त्रुटि फेंकता है।
उदाहरण:
SELECT REPLACE('1234', '123', '4567') AS Replace;
परिणाम:
Replace ------- 45674
इस मामले में, REPLACE()
उम्मीद के मुताबिक काम करता है।
हालांकि, अगर हम TRANSLATE()
. के लिए समान तर्क प्रदान करते हैं , हमें एक त्रुटि मिलती है:
SELECT TRANSLATE('1234', '123', '4567') AS Translate;
परिणाम:
Error: The second and third arguments of the TRANSLATE built-in function must contain an equal number of characters.
जैसा कि त्रुटि संदेश बताता है, दूसरे और तीसरे तर्क में समान संख्या में वर्ण होने चाहिए।
मुझे REPLACE() का उपयोग कब करना चाहिए?
आपको REPLACE()
. का उपयोग करना चाहिए जब आपको किसी विशिष्ट स्ट्रिंग की सभी घटनाओं को बदलने की आवश्यकता होती है, ठीक उसी तरह जैसे कि लिखा गया है। उदाहरण के लिए, किसी के नाम को दूसरे नाम में बदलना।
TRANSLATE()
का उपयोग करना ऐसे मामलों में विनाशकारी परिणाम हो सकते हैं:
SELECT REPLACE('Homer Simpson', 'Homer', 'Jason') AS Replace, TRANSLATE('Homer Simpson', 'Homer', 'Jason') AS Translate;
परिणाम:
Replace Translate ------------- ------------- Jason Simpson Jason Sispsan
मुझे ट्रांसलेट () का उपयोग कब करना चाहिए?
जैसा कि पिछले उदाहरण में दिखाया गया है, TRANSLATE()
फ़ंक्शन उपयोगी हो सकता है यदि आपको मूल स्ट्रिंग के भीतर उनके क्रम की परवाह किए बिना निर्दिष्ट प्रत्येक वर्ण की सभी घटनाओं को बदलने की आवश्यकता है।
इसका उपयोग REPLACE()
. के स्थान पर भी किया जा सकता है बस कोड के लिए। यहां एक उदाहरण दिया गया है (माइक्रोसॉफ्ट वेबसाइट पर एक उदाहरण के आधार पर):
SELECT REPLACE(REPLACE(REPLACE(REPLACE('2*[3+4]/{7-2}','[','('), ']', ')'), '{', '('), '}', ')') AS Replace, TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()') AS Translate;
परिणाम:
Replace Translate ------------- ------------- 2*(3+4)/(7-2) 2*(3+4)/(7-2)