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

Oracle में अल्पविराम से किसी संख्या को कैसे प्रारूपित करें?

जब आप TO_CHAR() का उपयोग करते हैं Oracle में किसी संख्या को प्रारूपित करने के लिए कार्य करते हैं, तो आप यह निर्धारित करने के लिए प्रारूप मॉडल का उपयोग करते हैं कि संख्या को कैसे स्वरूपित किया जाना चाहिए।

उदाहरण के लिए, आप 12,345.00 . जैसी किसी संख्या को प्रारूपित कर सकते हैं या 12.345,00 . की तरह , आपके स्थान के आधार पर।

प्रारूप मॉडल में G . शामिल हो सकते हैं या D किसी संख्या में अल्पविराम जोड़ने के लिए तत्वों को प्रारूपित करें। आप किसका उपयोग करते हैं यह इस बात पर निर्भर करता है कि आप अल्पविराम को हजारों विभाजक के रूप में चाहते हैं, या दशमलव वर्ण के रूप में।

वैकल्पिक रूप से, आप एक वास्तविक अल्पविराम वर्ण का उपयोग कर सकते हैं (, ) यदि आप चाहें, हालांकि यह विधि G . की तरह स्थानीय भाषा से अवगत नहीं है और D प्रारूप तत्व हैं।

G और D तत्वों को प्रारूपित करें

G को प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है और D प्रारूप तत्व:

SELECT TO_CHAR(12345, 'fm99G999D00')
FROM DUAL;

परिणाम:

12,345.00

इस स्थिति में, समूह विभाजक एक अल्पविराम को आउटपुट करता है, और दशमलव वर्ण एक अवधि को आउटपुट करता है। ऐसा इसलिए है क्योंकि मेरे वर्तमान सत्र का NLS_TERRITORY . है पैरामीटर Australia पर सेट है ।

अगर मैं अपना NLS_TERRITORY बदल दूं तो क्या होगा Germany . के लिए पैरामीटर :

ALTER SESSION SET NLS_TERRITORY = 'Germany';
SELECT TO_CHAR(12345, 'fm99G999D00')
FROM DUAL;

परिणाम:

12.345,00

अब अल्पविराम का उपयोग दशमलव वर्ण के लिए किया जा रहा है।

उपरोक्त प्रारूप मॉडल के त्वरित व्याख्याता के रूप में:

  • fm प्रारूप संशोधक किसी भी पैडिंग को दबा देता है जिसे परिणाम पर लागू किया जा सकता है।
  • 9 वर्ण संख्याओं का प्रतिनिधित्व करते हैं।
  • 0 वर्ण किसी भी अग्रणी या अनुगामी शून्य को दबाए बिना संख्याओं का प्रतिनिधित्व करता है।

यहां संख्या प्रारूप तत्वों की पूरी सूची दी गई है जिनका उपयोग आप एक त्वरित संदर्भ के रूप में कर सकते हैं।

Tवह NLS_NUMERIC_CHARACTERS पैरामीटर

जब हम NLS_TERRITORY . सेट करते हैं पैरामीटर (पिछले उदाहरण की तरह), यह परोक्ष रूप से NLS_NUMERIC_CHARACTERS सहित अन्य मापदंडों का एक समूह सेट करता है पैरामीटर।

टीवह NLS_NUMERIC_CHARACTERS पैरामीटर निर्धारित करता है कि कौन से वर्ण समूह विभाजक और दशमलव वर्ण के लिए उपयोग किए जाते हैं।

हम V$NLS_PARAMETERS . को क्वेरी कर सकते हैं यह देखने के लिए देखें कि कौन से वर्ण समूह विभाजक और दशमलव वर्ण के लिए उपयोग किए जा रहे हैं:

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

परिणाम:

,.

यहां हम देखते हैं कि दशमलव वर्ण अल्पविराम द्वारा दर्शाया जाता है, और समूह विभाजक एक अवधि द्वारा दर्शाया जाता है।

आप NLS_NUMERIC_CHARACTERS . का मान बदल सकते हैं यदि आप चाहें तो सीधे पैरामीटर (यानी NLS_TERRITORY को बदले बिना) पैरामीटर)।

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,';
SELECT TO_CHAR(12345, 'fm99G999D00')
FROM DUAL;

परिणाम:

12,345.00

लेकिन आपको शायद ऐसा करने से बचना चाहिए, क्योंकि यह एनएलएस मापदंडों के बीच एक डिस्कनेक्ट का कारण बनता है। आपके एनएलएस पैरामीटर अब वर्तमान क्षेत्र के लिए डिफ़ॉल्ट मान नहीं दिखाते हैं। जब तक आपके पास ऐसा न करने का अच्छा कारण न हो, आमतौर पर NLS_TERRITORY को बदलना बेहतर होता है प्रासंगिक क्षेत्र के लिए पैरामीटर, ताकि अन्य पैरामीटर भी नए क्षेत्र के लिए अपने डिफ़ॉल्ट पर अपडेट किए जा सकें।

'nlsparam' तर्क

मुझे एक बात का उल्लेख करना चाहिए कि T0_CHAR() फ़ंक्शन एक तीसरा तर्क स्वीकार करता है जो आपको NLS_NUMERIC_CHARACTERS सहित विभिन्न NLS पैरामीटर को अस्थायी रूप से सेट करने में सक्षम बनाता है। पैरामीटर। जब आप इसे फ़ंक्शन स्तर पर करते हैं, तो यह वर्तमान सत्र के लिए उन पैरामीटर के मान को नहीं बदलता है।

यहां एक उदाहरण दिया गया है:

ALTER SESSION SET NLS_TERRITORY = 'Germany';
SELECT 
    TO_CHAR(12345, 'fm99G999D00') AS "r1",
    TO_CHAR(
        12345, 'fm99G999D00',
        'NLS_NUMERIC_CHARACTERS = ''.,'''
        ) AS "r2",
    TO_CHAR(12345, 'fm99G999D00') AS "r3"
FROM DUAL;

परिणाम:

          r1           r2           r3 
____________ ____________ ____________ 
12.345,00    12,345.00    12.345,00   

यहां, मैंने सत्र के क्षेत्र को जर्मनी पर सेट किया, और फिर TO_CHAR() . को कॉल किया तीन बार।

  • पहली कॉल सत्र के एनएलएस पैरामीटर का उपयोग करती है। इसका मतलब है कि डिफ़ॉल्ट समूह विभाजक एक अवधि है।
  • दूसरे कॉल में, मैंने स्पष्ट रूप से अपना NLS_NUMERIC_CHARACTERS सेट किया है फ़ंक्शन के भीतर से पैरामीटर। इस मामले में, मैंने समूह विभाजक को अल्पविराम के रूप में सेट किया है। ऐसा करने से मेरे सत्र के NLS पैरामीटर प्रभावित नहीं हुए, जैसा कि तीसरी कॉल में देखा गया।
  • तीसरी कॉल पहली कॉल की तरह ही सत्र के एनएलएस पैरामीटर का उपयोग करती है। जैसा कि हम देख सकते हैं, समूह विभाजक और दशमलव वर्ण उस (अस्थायी) परिवर्तन से प्रभावित नहीं हुए हैं जो हमने अपनी दूसरी कॉल में किया था।

हार्डकोडेड कॉमा

किसी संख्या में अल्पविराम जोड़ने का दूसरा तरीका यह है कि इसे अपने प्रारूप मॉडल में हार्डकोड किया जाए।

उदाहरण:

ALTER SESSION SET NLS_TERRITORY = 'Germany';
SELECT TO_CHAR(12345, 'fm99,999.00')
FROM DUAL;

परिणाम:

12,345.00

इस मामले में मैंने अल्पविराम और अवधि को हार्डकोड किया। ऐसा करने से NLS_NUMERIC_CHARACTERS में सेट किए गए समूह विभाजक पर ध्यान नहीं दिया जाता पैरामीटर।

एकाधिक अल्पविराम

प्रारूप मॉडल में आपके पास एकाधिक अल्पविराम और/या समूह विभाजक हो सकते हैं।

उदाहरण:

ALTER SESSION SET NLS_TERRITORY = 'Australia';
SELECT TO_CHAR(123456789, 'fm999G999G999D00')
FROM DUAL;

परिणाम:

123,456,789.00

अमान्य कॉमा प्लेसमेंट

एक अल्पविराम या समूह विभाजक संख्या प्रारूप मॉडल में दशमलव वर्ण या अवधि के दाईं ओर प्रकट नहीं हो सकता है।

SELECT TO_CHAR(12345, 'fm99D999G00')
FROM DUAL;

परिणाम:

Error report -
ORA-01481: invalid number format model

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. R11i . में PL/SQL गेटवे

  2. Oracle sql में IPv4 एड्रेस को 4 नंबरों में विभाजित करें

  3. Oracle में DBMS_RANDOM के साथ एक यादृच्छिक तिथि उत्पन्न करें

  4. java.lang.UnsatisfiedLinkError:जावा में कोई ocijdbc11 नहीं। पुस्तकालय.पथ

  5. ओरेकल डेटाबेस में तत्काल निष्पादन के साथ तालिका डीडीएल कैसे चलाएं