मुझे वर्ण मान और संख्यात्मक दशमलव मान दोनों वाले ऑरैकल तालिका में कॉलम पर राउंड फ़ंक्शन या किसी अन्य फ़ंक्शन का उपयोग करने की आवश्यकता है। इसे संख्यात्मक मानों में परिवर्तन करना चाहिए और वर्ण/स्ट्रिंग मानों को पुनर्प्राप्त करना छोड़ देना चाहिए।
मैंने कोशिश की लेकिन यह अमान्य संख्या कहता है।
उदाहरण के लिए:
column(in table)
(1.7313883, 1.7313883, 1.63721,nm,nm, nm)
पुनर्प्राप्ति अनुरोध के बाद:
column/required(1.73x, 1.73x, 1.63x, nm, nm, nm)
कृपया मदद करे। अग्रिम में धन्यवाद
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
ऑपरेटर का रेगुलर एक्सप्रेशन वैरिएंट है: यह आपको एक पैटर्न के विरुद्ध स्ट्रिंग का परीक्षण करने की अनुमति देता है। यहाँ पैटर्न केवल अहस्ताक्षरित पूर्णांकों या अहस्ताक्षरित दशमलव संख्याओं को सादे संकेतन (वैज्ञानिक संकेतन नहीं) में अनुमति देता है।
तुम कोशिश कर सकते हो:
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;
अनुवाद एक अन्य विकल्प है जिसका उल्लेख यहां किया गया है:
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
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।