PostgreSQL में, आप to_number()
. का उपयोग कर सकते हैं एक स्ट्रिंग को एक संख्यात्मक मान में बदलने के लिए कार्य करता है।
अधिक विशेष रूप से, यह किसी संख्या के स्ट्रिंग प्रतिनिधित्व को एक संख्यात्मक मान में परिवर्तित करता है।
उदाहरण के लिए, यदि आपके पास $1,234.50
. है एक स्ट्रिंग के रूप में, आप to_number()
. का उपयोग कर सकते हैं उसे वास्तविक संख्या में बदलने के लिए जो संख्यात्मक . का उपयोग करती है डेटा प्रकार।
सिंटैक्स
वाक्य रचना इस प्रकार है:
to_number(text, text)
जहां पहला तर्क संख्या का एक स्ट्रिंग प्रतिनिधित्व है, और दूसरा तर्क उस टेम्पलेट को परिभाषित करता है जिसका पहला तर्क उपयोग करता है।
उदाहरण
प्रदर्शित करने के लिए यहां एक बुनियादी उदाहरण दिया गया है।
SELECT to_number('80', '99');
परिणाम:
80
इस मामले में, मैंने 99
. का इस्तेमाल किया टेम्पलेट के रूप में। प्रत्येक 9
"टेम्पलेट पैटर्न" के रूप में जाना जाता है। 9
टेम्पलेट पैटर्न एक अंक स्थिति का प्रतिनिधित्व करता है। मैंने दो का उपयोग किया, क्योंकि मैं चाहता था कि दोनों अंक शामिल हों।
अगर मैं 9
. में से किसी एक को हटा दूं तो यहां क्या होगा एस.
SELECT to_number('80', '9');
परिणाम:
8
इसलिए टेम्प्लेट में टेम्प्लेट पैटर्न की सही संख्या शामिल करना महत्वपूर्ण है।
समूह विभाजक और दशमलव बिंदु
बड़ी संख्याओं और/या संख्याओं के साथ भिन्नात्मक सेकंड के साथ काम करते समय, आपको टेम्पलेट पैटर्न शामिल करने होंगे जो समूह विभाजक और/या दशमलव बिंदु को निर्दिष्ट करते हैं।
आप इसे दो तरीकों से कर सकते हैं।
पहला विकल्प अल्पविराम और दशमलव बिंदु को शाब्दिक रूप से टाइप करना है।
SELECT to_number('7,000.25', '9,999.99');
परिणाम:
7000.25
दूसरा विकल्प स्थानीय-जागरूक संस्करणों का उपयोग करना है। ये समूह विभाजक (हजार विभाजक) के लिए G और दशमलव बिंदु के लिए D हैं।
तो पिछले उदाहरण को इस प्रकार फिर से लिखा जा सकता है:
SELECT to_number('7,000.25', '9G999D99');
परिणाम:
7000.25
मुद्रा प्रतीक
L
टेम्पलेट पैटर्न एक स्थानीय जागरूक मुद्रा प्रतीक का प्रतिनिधित्व करता है।
SELECT to_number('$7,000.25', 'L9G999D99');
परिणाम:
7000.25
वापसी का प्रकार
to_number()
. का रिटर्न मान फ़ंक्शन संख्यात्मक है।
आप रिटर्न प्रकार की जांच pg_typeof()
. से कर सकते हैं समारोह।
SELECT pg_typeof(to_number('$7,000.25', 'L9G999D99'));
परिणाम:
numeric
अप्रत्याशित परिणाम?
टेम्पलेट को सही करना महत्वपूर्ण है। अन्यथा आप अप्रत्याशित परिणामों के साथ समाप्त हो सकते हैं।
यदि मैं केवल L
. को शामिल करना भूल जाता हूं तो क्या होता है इसका एक उदाहरण यहां दिया गया है पिछले उदाहरण से टेम्पलेट पैटर्न।
SELECT to_number('$7,000.25', '9G999D99');
परिणाम:
7000
इसलिए क्योंकि मैं L
. को शामिल करना भूल गया था टेम्प्लेट पैटर्न (मुद्रा के लिए), इसने पूरे टेम्प्लेट को नंबर के साथ सिंक से बाहर कर दिया, जिसके परिणामस्वरूप G
अनदेखा किया जा रहा है, साथ ही D
।
स्पष्ट होने के लिए, सही टेम्पलेट की तुलना में यह फिर से है।
SELECT
to_number('$7,000.25', 'L9G999D99') AS "Right",
to_number('$7,000.25', '9G999D99') AS "Wrong";
परिणाम:
Right | Wrong ---------+------- 7000.25 | 7000
to_number() बनाम कास्ट()
to_number()
फ़ंक्शन मुख्य रूप से इनपुट स्वरूपों को संभालने के लिए प्रदान किया जाता है जिन्हें साधारण कास्टिंग द्वारा परिवर्तित नहीं किया जा सकता है। इसलिए यह आम तौर पर मानक संख्यात्मक अभ्यावेदन के लिए अनावश्यक है।
तो इस पेज पर पहला उदाहरण cast()
. का उपयोग करके किया जा सकता था ।
SELECT cast('80' AS NUMERIC);
परिणाम:
80
लेकिन जब चीजें थोड़ी और जटिल हो जाती हैं तो हम मुश्किल में पड़ जाते हैं।
SELECT cast('$7,000.25' AS NUMERIC);
परिणाम:
ERROR: invalid input syntax for type numeric: "$7,000.25" LINE 1: SELECT cast('$7,000.25' AS NUMERIC);
तो to_number()
मुख्य रूप से इस तरह की स्थितियों के लिए डिज़ाइन किया गया था।
टेम्पलेट पैटर्न और संशोधक की पूरी सूची
पोस्टग्रेज में बहुत अधिक टेम्पलेट पैटर्न और संशोधक शामिल हैं।
इनका उपयोग संख्यात्मक मानों को स्वरूपित करते समय भी किया जा सकता है (उदाहरण के लिए to_char()
. का उपयोग करते समय संख्या का एक स्वरूपित स्ट्रिंग प्रतिनिधित्व वापस करने के लिए कार्य)।
पूरी सूची के लिए PostgreSQL में सांख्यिक स्वरूपण के लिए टेम्पलेट पैटर्न और संशोधक देखें।