कैसे मैं एक varchar2 स्ट्रिंग में चरित्र -
की घटनाओं की संख्या की गणना कर सकते हैं?ओरेकल वर्कर मूल्य में किसी चरित्र की घटनाओं की संख्या को कैसे गिनें?
उदाहरण:
select XXX('123-345-566', '-') from dual;
----------------------------------------
2
कैसे मैं एक varchar2 स्ट्रिंग में चरित्र -
की घटनाओं की संख्या की गणना कर सकते हैं?ओरेकल वर्कर मूल्य में किसी चरित्र की घटनाओं की संख्या को कैसे गिनें?
उदाहरण:
select XXX('123-345-566', '-') from dual;
----------------------------------------
2
ये रहा:
select length('123-345-566') - length(replace('123-345-566','-',null))
from dual;
तकनीकी तौर पर, यदि स्ट्रिंग आप जाँच करना चाहते हैं केवल चरित्र आप की गणना करना चाहते हैं, इसके बाद के संस्करण क्वेरी शून्य प्राप्त होगा; (क्योंकि लंबाई (शून्य यानी शून्य) = Oracle में शून्य)
select coalesce(length('123-345-566') - length(replace('123-345-566','-',null)), length('123-345-566'), 0)
from dual;
अंतिम 0 coalesce
में कैच मामले ऐसे हैं जिनमें एक खाली स्ट्रिंग में गिनती कर रहे हैं: निम्न क्वेरी सभी मामलों में सही जवाब दे देंगे ।
बहुत अच्छा यह जवाब;) – kevthanewversi
यहाँ एक विचार है: जगह सब कुछ है कि रिक्त स्ट्रिंग के साथ एक पानी का छींटा चार नहीं है की कोशिश करो। फिर गिनें कि कितने डैश बने रहे।
select length(regexp_replace('123-345-566', '[^-]', '')) from dual
REGEXP_COUNT चाल करना चाहिए:
select (length('a') - nvl(length(replace('a','b')),0))/length('b')
from dual
:
select REGEXP_COUNT('123-345-566', '-') from dual;
मैं
SELECT LENGTH('123-345-566') - LENGTH(REPLACE('123-345-566', '-', '')) FROM DUAL;
SELECT {FN LENGTH('123-345-566')} - {FN LENGTH({FN REPLACE('123-345-566', '#', '')})} FROM DUAL
पर था, आपको अपने कोड में कुछ स्पष्टीकरण भी प्रदान करना चाहिए। – brimborium
यह किस तरह का वाक्यविन्यास है? – collapsar
आपको कुछ स्पष्टीकरण – Faisal
के बारे में सोचा एक समाधान है कि दोनों पात्रों और सबस्ट्रिंग के लिए कार्य करेंगे है जहां एक स्ट्रिंग है जिसमें आप समुद्र करते हैं ख की घटना
आपका दिन शुभ हो आरसीएच!
select count(*)
from (
select substr('K_u_n_a_l',level,1) str
from dual
connect by level <=length('K_u_n_a_l')
)
where str ='_';
भी प्रदान करना चाहिए, जबकि यह कोड प्रश्न का उत्तर दे सकता है, इस बारे में अतिरिक्त संदर्भ प्रदान करता है कि समस्या को हल करने के तरीके के बारे में अतिरिक्त संदर्भ प्रदान करने से उत्तर के दीर्घकालिक मूल्य में सुधार होगा। – kayess
मुझे बहुत ही समस्या का सामना करना पड़ा ... लेकिन RegExp_Count इसे हल नहीं कर सका। कितनी बार स्ट्रिंग '16, 124,3,3,1,0, '', 3, 'है? हम 2 बार देखते हैं, लेकिन RegExp_Count रिटर्न सिर्फ 1. यही बात 'bbaaaacc' 'के साथ है और जब यह' आ 'में देख के रूप में - 3 बार किया जाना चाहिए और RegExp_Count रिटर्न सिर्फ 2.
select REGEXP_COUNT('336,14,3,3,11,0,' , ',3,') from dual;
select REGEXP_COUNT('bbaaaacc' , 'aa') from dual;
मैं कुछ समय के लिए खो दिया वेब पर समाधान शोध करने के लिए। 'नहीं मिला' ... इसलिए मैंने अपना स्वयं का फ़ंक्शन लिखा जो मौका की वास्तविक संख्या देता है। उम्मीद है कि यह उपयोगी होगा।
CREATE OR REPLACE FUNCTION EXPRESSION_COUNT(pEXPRESSION VARCHAR2, pPHRASE VARCHAR2) RETURN NUMBER AS
vRET NUMBER := 0;
vPHRASE_LENGTH NUMBER := 0;
vCOUNTER NUMBER := 0;
vEXPRESSION VARCHAR2(4000);
vTEMP VARCHAR2(4000);
BEGIN
vEXPRESSION := pEXPRESSION;
vPHRASE_LENGTH := LENGTH(pPHRASE);
LOOP
vCOUNTER := vCOUNTER + 1;
vTEMP := SUBSTR(vEXPRESSION, 1, vPHRASE_LENGTH);
IF (vTEMP = pPHRASE) THEN
vRET := vRET + 1;
END IF;
vEXPRESSION := SUBSTR(vEXPRESSION, 2, LENGTH(vEXPRESSION) - 1);
EXIT WHEN (LENGTH(vEXPRESSION) = 0) OR (vEXPRESSION IS NULL);
END LOOP;
RETURN vRET;
END;
प्रदर्शन के बारे में हम दिलचस्प पाया 'REGEXP_COUNT' समाधान के बारे में 5 बार धीमी (अधिक CPU समय लगता है)' लंबाई लंबाई से (REPLACE()) 'दृष्टिकोण हो सकता है। ओरेकल 11.2.0.4 लिनक्स x86 64-बिट –