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

ओरेकल में कास्ट () फ़ंक्शन

Oracle डाटाबेस में, CAST() फ़ंक्शन अपने तर्क को एक अलग डेटा प्रकार में परिवर्तित करता है।

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

सिंटैक्स

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

CAST({ expr | MULTISET (subquery) } AS type_name
  [ DEFAULT return_value ON CONVERSION ERROR ]
  [, fmt [, 'nlsparam' ] ])

उदाहरण

प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है:

SELECT CAST('10-AUG-30' AS TIMESTAMP)
FROM DUAL;

परिणाम:

10-AUG-30 12.00.00.000000000 AM

रूपांतरण त्रुटि पर एक डिफ़ॉल्ट मान प्रदान करें

आप DEFAULT return_value ON CONVERSION ERROR यह निर्दिष्ट करने के लिए तर्क कि मान को परिवर्तित करते समय त्रुटि होने पर क्या लौटाया जाए।

उदाहरण:

SELECT CAST(
    'Homer' AS NUMBER
    DEFAULT '0' ON CONVERSION ERROR
    )
FROM DUAL;

परिणाम:

0

यहां बताया गया है कि जब हम DEFAULT return_value ON CONVERSION ERROR तर्क:

SELECT CAST(
    'Homer' AS NUMBER
    )
FROM DUAL;

परिणाम:

ORA-01722: invalid number

एक प्रारूप निर्दिष्ट करें - fmt तर्क

इस उदाहरण में मैं fmt . का उपयोग करता हूं पहले तर्क में दिनांक का प्रारूप निर्दिष्ट करने के लिए तर्क:

SELECT CAST(
    'Friday, 03 September 2021' AS TIMESTAMP,
    'Day, DD Month YYYY'
    )
FROM DUAL;

परिणाम:

03-SEP-21 12.00.00.000000000 AM

जब आप प्रारूप को छोड़ देते हैं

प्रारूप को छोड़ने से त्रुटि हो सकती है, यह इस बात पर निर्भर करता है कि पहला तर्क परिणामी डेटा प्रकार के लिए सत्र के डिफ़ॉल्ट स्वरूपण के अनुरूप है या नहीं।

जब मैं फ़ॉर्मेट तर्क को छोड़ देता हूं तो यहां क्या होता है:

SELECT CAST(
    'Friday, 03 September 2021' AS TIMESTAMP
    )
FROM DUAL;

परिणाम:

Error report -
ORA-01858: a non-numeric character was found where a numeric was expected

इस मामले में, मैंने एक स्ट्रिंग को TIMESTAMP . में बदलने का प्रयास किया मान, लेकिन स्ट्रिंग TIMESTAMP . जैसी नहीं थी मेरे सत्र के NLS_TIMESTAMP_FORMAT . के आधार पर मान पैरामीटर, और एक त्रुटि हुई।

मेरा वर्तमान सत्र TIMESTAMP . के लिए जिस प्रारूप का उपयोग करता है, वह यहां दिया गया है मान:

SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_TIMESTAMP_FORMAT';

परिणाम:

DD-MON-RR HH.MI.SSXFF AM

आइए इसे बदलें:

ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'fmDay, DD Month YYYY HH.MI.SSXFF AM';

परिणाम:

Session altered.

और अब पिछले रूपांतरण को फिर से चलाते हैं:

SELECT CAST(
    'Friday, 03 September 2021' AS TIMESTAMP
    )
FROM DUAL;

परिणाम:

Friday, 3 September 2021 12.0.0.000000000 AM

इस बार कोई गड़बड़ी नहीं है।

ध्यान दें, हालांकि मैंने स्पष्ट रूप से NLS_TIMESTAMP_FORMAT . को बदल दिया है यहां पैरामीटर, आमतौर पर NLS_TERRITORY को बदलना बेहतर होता है इसके बजाय पैरामीटर। NLS_TERRITORY बदलना पैरामीटर परोक्ष रूप से अन्य एनएलएस मापदंडों को बदलता है, जैसे दिनांक स्वरूप, मुद्रा प्रतीक, आदि।

किसी भी स्थिति में, जैसा कि ऊपर दिखाया गया है, किसी भी NLS पैरामीटर को बदलने के बजाय, आप fmt का उपयोग कर सकते हैं फ़ंक्शन को कॉल करते समय तर्क।

nlsparam तर्क

आप वैकल्पिक nlsparam . का उपयोग कर सकते हैं फ़ंक्शन के भीतर से NLS पैरामीटर निर्दिष्ट करने का तर्क।

उदाहरण:

ALTER SESSION SET NLS_TERRITORY = 'Australia';
ALTER SESSION SET NLS_DATE_LANGUAGE = 'English';
ALTER SESSION SET NLS_DATE_FORMAT = 'fmDay, DD Month YYYY';
SELECT 
    CAST(
    'sábado, 10 agosto 30' AS DATE,
    'Day, DD Month RR',
    'NLS_DATE_LANGUAGE = SPANISH'
    )
FROM DUAL;

परिणाम:

Saturday, 10 August 2030

इस मामले में, मैंने अपने सत्र के कुछ एनएलएस पैरामीटर सेट करके शुरुआत की। फिर जब मैंने CAST() . को कॉल किया , मैंने स्पेनिश में स्ट्रिंग पास की, और फिर nlsparam . का उपयोग किया इसे निर्दिष्ट करने के लिए तर्क।

इसलिए, परिणाम मेरे सत्र के एनएलएस मापदंडों का उपयोग करके प्रदर्शित किया जाता है, लेकिन वास्तविक मूल्य जो मैंने पारित किया वह स्पेनिश में था।

अधिक जानकारी

डेटा प्रकारों के बीच कनवर्ट करते समय बहुत कुछ ध्यान में रखना चाहिए। CAST() . का उपयोग करने के बारे में अधिक जानकारी के लिए Oracle के दस्तावेज़ देखें समारोह।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जावा - ऑरैकल संग्रहीत प्रक्रिया में पासिंग सरणी

  2. Oracle डेटाबेस में मान्य समय क्षेत्रों की सूची कैसे लौटाएं?

  3. वर्तमान टाइमस्टैम्प में 2 महीने जोड़ें

  4. मैं ऑरैकल में मौजूदा टेबल पर एक डीडीएल स्क्रिप्ट कैसे उत्पन्न (या प्राप्त) कर सकता हूं? मुझे उन्हें हाइव में फिर से बनाना है

  5. ओरेकल में एक अलग प्रारूप में तारीख कैसे प्रदर्शित करें?