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 के दस्तावेज़ देखें समारोह।