मुझे वर्ण मान और संख्यात्मक दशमलव मान दोनों वाले ऑरैकल तालिका में कॉलम पर राउंड फ़ंक्शन या किसी अन्य फ़ंक्शन का उपयोग करने की आवश्यकता है। इसे संख्यात्मक मानों में परिवर्तन करना चाहिए और वर्ण/स्ट्रिंग मानों को पुनर्प्राप्त करना छोड़ देना चाहिए।

मैंने कोशिश की लेकिन यह अमान्य संख्या कहता है।

उदाहरण के लिए:

column(in table)
(1.7313883, 1.7313883, 1.63721,nm,nm, nm)

पुनर्प्राप्ति अनुरोध के बाद:

column/required(1.73x, 1.73x, 1.63x, nm, nm, nm)

कृपया मदद करे। अग्रिम में धन्यवाद

0
Ashish Virmani 22 अगस्त 2017, 11:01

3 जवाब

सबसे बढ़िया उत्तर

आप परीक्षण कर सकते हैं कि स्ट्रिंग संख्यात्मक है (उदाहरण के लिए नियमित अभिव्यक्ति के साथ) और यदि ऐसा है, तो इसे गोल करने के लिए इसे एक संख्या में परिवर्तित करें, और फिर इसे वापस स्ट्रिंग में कनवर्ट करें।

यहां बताया गया है कि यह mytable.col को कैसे देख सकता है:

select case when regexp_like(col, '\d+(\.\d+)?') 
          then to_char(round(to_number(col), 2)) || 'x'
          else col
       end
from   mytable

एनबी: यह मानता है कि एनएलएस दशमलव विभाजक . (डिफ़ॉल्ट) पर सेट है। यदि नहीं, तो to_char कॉल को यहां तक ​​बढ़ाएं:

to_char(round(to_number(col, '99999D99999999999', 'NLS_NUMERIC_CHARACTERS=''.,'''), 2))

व्याख्या

नियमित अभिव्यक्ति टूट गई:

  • \d: एक अंक से मेल खाता है। यह [0-9] के लिए छोटा है।
  • +: पिछले में से एक या अधिक
  • ( )?: मैच का वैकल्पिक भाग -- संख्या में दशमलव भाग के लिए वैकल्पिक रूप से अनुमति देने के लिए यहां उपयोग किया जाता है
  • \.: एक शाब्दिक बिंदु से मेल खाता है। बैकस्लैश की आवश्यकता है क्योंकि . का रेगुलर एक्सप्रेशन में एक विशेष अर्थ है।

regexp_like, like ऑपरेटर का रेगुलर एक्सप्रेशन वैरिएंट है: यह आपको एक पैटर्न के विरुद्ध स्ट्रिंग का परीक्षण करने की अनुमति देता है। यहाँ पैटर्न केवल अहस्ताक्षरित पूर्णांकों या अहस्ताक्षरित दशमलव संख्याओं को सादे संकेतन (वैज्ञानिक संकेतन नहीं) में अनुमति देता है।

1
trincot 22 अगस्त 2017, 12:56

तुम कोशिश कर सकते हो:

SELECT To_char(1.854754857, 'B999999999999999999990.999') FROM DUAL;
SELECT To_char(1.854754857, 'B999999999999999999990.99') FROM DUAL;
SELECT To_char(1.854754857, 'B999999999999999999990.9') FROM DUAL;
0
Hong Van Vit 22 अगस्त 2017, 11:08

अनुवाद एक अन्य विकल्प है जिसका उल्लेख यहां किया गया है:

https://www.techonthenet.com/oracle/functions/to_number.php

निम्नलिखित कोड Oracle12C में काम करता है:

WITH TABLE1
     AS (SELECT '1.7313883' VAL FROM DUAL
         UNION ALL
         SELECT '1.7313884' FROM DUAL
         UNION ALL
         SELECT 'nm' FROM DUAL
         UNION ALL
         SELECT 'other' FROM DUAL)
SELECT DECODE (TRANSLATE (VAL, ' +-.0123456789', ' '),
               NULL, TO_CHAR (ROUND (TO_NUMBER (VAL), 2)) || 'x' ,
               VAL) new_val
  FROM TABLE1;

नतीजे के साथ:

NEW_VAL
1.73x
1.73x
nm
other
0
LingYan Meng 22 अगस्त 2017, 12:12