Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

अनुवाद () Oracle में समारोह

Oracle में, TRANSLATE() फ़ंक्शन आपको एक ऑपरेशन में कई एकल-वर्ण, एक-से-एक प्रतिस्थापन करने की अनुमति देता है।

दूसरे तर्क में निर्दिष्ट कुछ वर्णों को तीसरे तर्क में निर्दिष्ट वर्णों के गंतव्य सेट में अनुवादित करने के बाद यह पहले तर्क के रूप में प्रदान की गई स्ट्रिंग देता है।

यह REPLACE() . के समान है फ़ंक्शन, सिवाय इसके कि REPLACE() फ़ंक्शन पूरी स्ट्रिंग को दूसरी स्ट्रिंग से बदल देता है (अर्थात वर्ण द्वारा वर्ण नहीं, जैसे TRANSLATE() करता है)।

सिंटैक्स

वाक्य रचना इस प्रकार है:

TRANSLATE(expr, from_string, to_string)

फ़ंक्शन expr returns लौटाता है from_string . में प्रत्येक वर्ण की सभी घटनाओं के साथ to_string . में इसके संगत वर्ण द्वारा प्रतिस्थापित किया गया

उदाहरण

यहां एक बुनियादी उदाहरण दिया गया है:

SELECT 
    TRANSLATE('Cat', 'at', 'ow')
FROM DUAL;

परिणाम:

Cow

यहाँ, a और t वर्णों को o . से बदल दिया गया और w

इस मामले में, REPLACE() फ़ंक्शन एक ही परिणाम उत्पन्न करेगा। यहां दो कार्य साथ-साथ दिए गए हैं:

SELECT 
  TRANSLATE('Cat', 'at', 'ow') AS "TRANSLATE",
  REPLACE('Cat', 'at', 'ow') AS "REPLACE"
FROM DUAL;

परिणाम:

   TRANSLATE    REPLACE 
____________ __________ 
Cow          Cow       

इस मामले में, दोनों कार्यों का परिणाम समान है, लेकिन विभिन्न कारणों से।

यहां बताया गया है कि प्रत्येक फ़ंक्शन ने क्या किया:

  • TRANSLATE() प्रतिस्थापित a और t (प्रत्येक व्यक्तिगत चरित्र)
  • REPLACE() प्रतिस्थापित at (स्ट्रिंग)

मिश्रित क्रम

यह उदाहरण दर्शाता है कि TRANSLATE() REPLACE() . से अलग है . इस उदाहरण में, मैं बदले जाने वाले वर्णों के क्रम को और साथ ही उन्हें बदलने के लिए वर्णों के क्रम को बदलता हूं:

SELECT 
  TRANSLATE('Cat', 'ta', 'wo') AS "TRANSLATE",
  REPLACE('Cat', 'ta', 'wo') AS "REPLACE"
FROM DUAL;

परिणाम:

   TRANSLATE    REPLACE 
____________ __________ 
Cow          Cat       

इस मामले में केवल TRANSLATE() समारोह प्रभावी हुआ। ऐसा इसलिए है क्योंकि यह फ़ंक्शन एक-एक करके प्रत्येक वर्ण से गुजरता है। REPLACE() दूसरी ओर, फ़ंक्शन पूरी स्ट्रिंग को ठीक उसी क्रम में ढूंढता है।

एक अधिक शक्तिशाली उदाहरण

यह उदाहरण एक ऐसे परिदृश्य को प्रदर्शित करता है जहां TRANSLATE() फ़ंक्शन का REPLACE() . पर एक महत्वपूर्ण लाभ है समारोह:

SELECT 
    TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()')
FROM DUAL;

परिणाम:

2*(3+4)/(7-2)

REPLACE() . का उपयोग करके समान परिणाम प्राप्त करने के लिए फ़ंक्शन, हमें यह करने की आवश्यकता होगी:

SELECT
REPLACE
(
      REPLACE
      (
            REPLACE
            (
                  REPLACE
                  (
                        '2*[3+4]/{7-2}',
                        '[',
                        '('
                  ),
                  ']',
                  ')'
            ),
            '{',
            '('
      ),
      '}',
      ')'
)
FROM DUAL;

परिणाम:

2*(3+4)/(7-2)

उपरोक्त उदाहरण टी-एसक्यूएल TRANSLATE() . के लिए माइक्रोसॉफ्ट दस्तावेज पर आधारित है फ़ंक्शन, जो Oracle संस्करण के समान है।

कोई मिलान नहीं

यदि कोई मिलान नहीं है, TRANSLATE() स्ट्रिंग को अपरिवर्तित लौटाता है:

SELECT 
  TRANSLATE('Cat', 'x', 'y')
FROM DUAL;

परिणाम:

Cat

केस संवेदनशीलता

TRANSLATE() फ़ंक्शन केस-संवेदी मिलान करता है:

SELECT 
  TRANSLATE('Cat', 'AT', 'ow')
FROM DUAL;

परिणाम:

Cat

इस उदाहरण में, मामला मेल नहीं खाता, और इसलिए मूल स्ट्रिंग को अपरिवर्तित लौटा दिया गया।

खाली स्ट्रिंग्स

यहाँ क्या होता है जब प्रत्येक दिए गए तर्क के लिए एक खाली स्ट्रिंग पास की जाती है:

SET NULL 'null';
SELECT 
  TRANSLATE('Cat', 'at', '') AS r1,
  TRANSLATE('Cat', '', 'ow') AS r2,
  TRANSLATE('', 'at', 'ow') AS r3
FROM DUAL;

परिणाम:

     R1      R2      R3 
_______ _______ _______ 
null    null    null   

डिफ़ॉल्ट रूप से, SQLcl और SQL*Plus जब भी null . खाली स्थान लौटाते हैं SQL SELECT . के परिणामस्वरूप होता है बयान।

हालांकि, आप SET NULL . का उपयोग कर सकते हैं वापस करने के लिए एक अलग स्ट्रिंग निर्दिष्ट करने के लिए। यहाँ मैंने निर्दिष्ट किया है कि स्ट्रिंग null लौटाया जाना चाहिए।

स्पेस कैरेक्टर

खाली स्ट्रिंग स्पेस कैरेक्टर के समान नहीं है।

यहां बताया गया है कि जब हम खाली स्ट्रिंग को स्पेस में बदलते हैं तो क्या होता है:

SELECT 
  TRANSLATE('Cat', 'at', ' ') AS r1,
  TRANSLATE('Cat', ' ', 'ow') AS r2,
  TRANSLATE(' ', 'at', 'ow') AS r3
FROM DUAL;

परिणाम:

   R1     R2    R3 
_____ ______ _____ 
C     Cat         

यहां एक उदाहरण दिया गया है जो बताता है कि कैसे TRANSLATE() और REPLACE() स्पेस कैरेक्टर का उपयोग करते समय अलग-अलग परिणाम लौटाएं:

SELECT 
    TRANSLATE(' ', ' ', 'Cow') AS TRANSLATE,
    REPLACE(' ', ' ', 'Cow') AS REPLACE
FROM DUAL; 

परिणाम:

   TRANSLATE    REPLACE 
____________ __________ 
C            Cow       

अशक्त तर्क

पासिंग null किसी भी तर्क के लिए null returns लौटाता है :

SET NULL 'null';
SELECT 
    TRANSLATE(null, 'dog', 'cat') AS "1",
    TRANSLATE('Black dog', null, 'cat') AS "2",
    TRANSLATE('Black dog', 'dog', null) AS "3"
FROM DUAL;

परिणाम:

      1       2       3 
_______ _______ _______ 
null    null    null   

अनुपलब्ध तर्क

कॉलिंग TRANSLATE() कोई तर्क पारित किए बिना त्रुटि उत्पन्न होती है:

SELECT TRANSLATE()
FROM DUAL;

परिणाम:

Error starting at line : 1 in command -
SELECT TRANSLATE()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

बहुत अधिक तर्क

और बहुत से तर्कों को पारित करने से एक त्रुटि मिलती है:

SELECT TRANSLATE('Cat', 'a', 'b', 'c')
FROM DUAL;

परिणाम:

Error starting at line : 1 in command -
SELECT TRANSLATE('Cat', 'a', 'b', 'c')
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle पर ORDER के साथ INSERT करें

  2. Oracle संग्रहित प्रक्रिया उदाहरण में तालिका प्रकार

  3. मैक पर Oracle कैसे स्थापित करें

  4. Oracle का varchar क्रम क्रम varchar तुलना के व्यवहार से मेल क्यों नहीं खाता है?

  5. केवल बैकअप SQL स्कीमा?