अगर आपको वह त्रुटि 13.5
. जैसी स्ट्रिंग से मिल रही है फिर आपके सत्र का NLS_NUMERIC_CHARACTERS
ऐसा लगता है कि दशमलव विभाजक के रूप में अल्पविराम का उपयोग करने के लिए सेट किया गया है:
alter session set nls_numeric_characters=',.';
with your_table (bikou) as (
select '10' from dual
union all select '12' from dual
union all select '13.5' from dual
union all select null from dual
)
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', '')))
from your_table;
SQL Error: ORA-01722: invalid number
आप या तो सत्र को दशमलव विभाजक के रूप में अवधि का उपयोग करने के लिए स्पष्ट रूप से सेट कर सकते हैं, या एक प्रारूप मास्क प्रदान कर सकते हैं जो एक अवधि का उपयोग करता है:
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''), '99999999.99999'))
from your_table;
SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:
---------------------------------------
35,5
या मॉडल में दशमलव विभाजक मार्कर का उपयोग करें और सत्र की NLS सेटिंग को ओवरराइड करें:
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''),
'99999999D99999', 'nls_numeric_characters=''.,'''))
from your_table;
SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:
---------------------------------------
35,5
मुखौटा स्पष्ट रूप से उन सभी मूल्यों के लिए उपयुक्त होना चाहिए जो आप अपने रेगेक्स से वापस उम्मीद करते हैं; हो सकता है कि मैंने जो उपयोग किया है वह आपके डेटा के लिए बिल्कुल सही न हो।
इस तरह का मुद्दा यह है कि आपको संख्याओं या तिथियों को तार के रूप में क्यों नहीं स्टोर करना चाहिए। अपने कॉलम के लिए सही डेटा प्रकार का उपयोग करें।