मारियाडीबी में, CAST()
एक अंतर्निहित फ़ंक्शन है जो एक मान को दूसरे डेटा प्रकार में परिवर्तित करता है। यह एक प्रकार का मान लेता है और निर्दिष्ट प्रकार का मान देता है।
जब आप फ़ंक्शन को कॉल करते हैं, तो आप मान को एक तर्क के रूप में प्रदान करते हैं, साथ ही वह प्रकार भी प्रदान करते हैं, जिसमें आप इसे रूपांतरित करना चाहते हैं।
CAST()
CONVERT()
. के समान कार्य करता है ।
सिंटैक्स
वाक्य रचना इस प्रकार है:
CAST(expr AS type)
जहां expr
कन्वर्ट करने के लिए मान है, और type
वह डेटा प्रकार है जिसमें आप इसे रूपांतरित करना चाहते हैं।
उदाहरण
यहां एक सरल उदाहरण दिया गया है:
SELECT CAST(123.45 AS INT);
परिणाम:
+---------------------+ | CAST(123.45 AS INT) | +---------------------+ | 123 | +---------------------+
इसने मान को एक पूर्णांक में डाल दिया, और इसलिए, दशमलव स्थानों को हटा दिया गया।
यहां एक और उदाहरण दिया गया है:
SELECT CAST('2020-01-01' AS DATETIME);
परिणाम:
+--------------------------------+ | CAST('2020-01-01' AS DATETIME) | +--------------------------------+ | 2020-01-01 00:00:00 | +--------------------------------+
इस मामले में, हमने एक स्ट्रिंग को DATETIME
. में बदल दिया है डेटा प्रकार।
रूपांतरण विफलता
पिछले उदाहरण में, हमने एक मान्य DATE
प्रदान किया था स्ट्रिंग (या DATE
शाब्दिक)। इसलिए मारियाडीबी मान को DATETIME
. में बदलने में सक्षम था डेटा प्रकार।
हालांकि, यहां बताया गया है कि जब हम एक अमान्य DATE
प्रदान करते हैं तो क्या होता है स्ट्रिंग:
SELECT CAST('1 Jan, 2020' AS DATE);
परिणाम:
+-----------------------------+ | CAST('1 Jan, 2020' AS DATE) | +-----------------------------+ | NULL | +-----------------------------+
यहाँ, MariaDB स्पष्ट रूप से यह पता नहीं लगा पाई कि इस मान को कैसे परिवर्तित किया जाए और NULL
. लौटाया ।
इस मामले में, हम किसी अन्य फ़ंक्शन का उपयोग कर सकते हैं, जैसे STR_TO_DATE()
ऐसा रूपांतरण करने के लिए:
SELECT STR_TO_DATE('1 Jan, 2020', '%e %M, %Y');
परिणाम:
+-----------------------------------------+ | STR_TO_DATE('1 Jan, 2020', '%e %M, %Y') | +-----------------------------------------+ | 2020-01-01 | +-----------------------------------------+
एक वर्ण सेट निर्दिष्ट करें
CAST()
. का उपयोग करते समय वापसी मान के लिए उपयोग किए जाने वाले वर्ण सेट को निर्दिष्ट करना संभव है समारोह।
उदाहरण:
SELECT
COLLATION(123) AS "123",
COLLATION(CAST(123 AS CHAR CHARACTER SET utf16)) AS "utf16",
COLLATION(CAST(123 AS CHAR CHARACTER SET latin1)) AS "latin1",
COLLATION(CAST(123 AS CHAR CHARACTER SET big5)) AS "big5";
परिणाम:
+--------+------------------+-------------------+-----------------+ | 123 | utf16 | latin1 | big5 | +--------+------------------+-------------------+-----------------+ | binary | utf16_general_ci | latin1_swedish_ci | big5_chinese_ci | +--------+------------------+-------------------+-----------------+
यहां, हमने COLLATION()
. का उपयोग किया है नए डेटा प्रकार में डालने के बाद प्रत्येक मान के संयोजन को वापस करने के लिए कार्य करता है। प्रत्येक मान निर्दिष्ट वर्ण सेट के लिए डिफ़ॉल्ट संयोजन का उपयोग करता है।
प्रारंभिक मान एक स्ट्रिंग नहीं है, और इसलिए COLLATION()
बाइनरी देता है।
CHAR
में कनवर्ट किया जा रहा है वर्ण सेट को निर्दिष्ट किए बिना collation_connection
. में परिणाम होगा वर्ण सेट संयोजन का उपयोग किया जा रहा है।
एक संयोजन निर्दिष्ट करें
एक संयोजन निर्दिष्ट करना भी संभव है।
उदाहरण:
SELECT
COLLATION(123) AS "123",
COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE utf16_icelandic_ci) AS "utf16",
COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE latin1_german2_ci) AS "latin1",
COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";
परिणाम:
+--------+--------------------+-------------------+-----------------------+ | 123 | utf16 | latin1 | big5 | +--------+--------------------+-------------------+-----------------------+ | binary | utf16_icelandic_ci | latin1_german2_ci | big5_chinese_nopad_ci | +--------+--------------------+-------------------+-----------------------+
इस मामले में, हमने स्पष्ट रूप से उपयोग करने के लिए एक संयोजन निर्दिष्ट किया है जो निर्दिष्ट वर्ण सेट के लिए डिफ़ॉल्ट संयोजन नहीं है (हालांकि अभी भी वर्ण सेट के लिए एक वैध संयोजन है)।
ऐसे मिलान को निर्दिष्ट करना जो वर्ण सेट के लिए मान्य नहीं है, एक त्रुटि उत्पन्न करता है।
जब मैं पहले दो कोलाजंस को इधर-उधर कर देता हूँ तो क्या होता है:
SELECT
COLLATION(123) AS "123",
COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE latin1_german2_ci) AS "utf16",
COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE utf16_icelandic_ci) AS "latin1",
COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";
परिणाम:
ERROR 1253 (42000): COLLATION 'latin1_german2_ci' is not valid for CHARACTER SET 'utf16'
यह पहले वाले को मिला और एक त्रुटि हुई, क्योंकि latin1_german2_ci
utf16
. के लिए मान्य मिलान नहीं है चरित्र सेट।
कोलाज की पूरी सूची और उनके मेल खाने वाले कैरेक्टर सेट के लिए मारियाडीबी में उपलब्ध कोलाज की यह सूची देखें।
अशक्त तर्क
null
को बदलने की कोशिश कर रहा है रिटर्न null
:
SELECT CAST(null AS DATETIME);
परिणाम:
+------------------------+ | CAST(null AS DATETIME) | +------------------------+ | NULL | +------------------------+
हालांकि, पासिंग null
नए डेटा प्रकार को निर्दिष्ट किए बिना त्रुटि होती है:
SELECT CAST(null);
परिणाम:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1पर ')' के पास उपयोग करने के लिए सही सिंटैक्स के लिए अपने मारियाडीबी सर्वर संस्करण से संबंधित मैनुअल की जांच करें।
अनुपलब्ध तर्क
कॉलिंग CAST()
तर्क पारित किए बिना एक त्रुटि उत्पन्न होती है:
SELECT CAST();
परिणाम:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1पर ')' के पास उपयोग करने के लिए सही सिंटैक्स के लिए अपने मारियाडीबी सर्वर संस्करण से संबंधित मैनुअल की जांच करें।