2010-01-06 16 views
5

खोजने के लिए ओरेकल INSTR फ़ंक्शन का उपयोग करें, instr फ़ंक्शन एक स्ट्रिंग में उप-स्ट्रिंग का स्थान देता है।ओरेकल/PLSQL में एकाधिक स्ट्रिंग्स

यदि उप-स्ट्रिंग नहीं मिली है, तो instr0 वापस आ जाएगा।

मैं एक स्ट्रिंग में एकाधिक उप-तारों को खोजना चाहता हूं और पहले गैर-शून्य मान को वापस करना चाहता हूं। यह regexp_instr का उपयोग करके हासिल किया जा सकता है, लेकिन मुझे एक गैर- regexp_ समाधान चाहिए।

उदाहरण:

regexp_instr('500 Oracle Parkway, Redwood Shores, CA','(Apple|Park|Shores)') 

('पार्क' का स्थान) 12 लौटना चाहिए।

उत्तर

4

INSTR रेगेक्स ओआरएस का समर्थन नहीं करता है - आपको प्रत्येक सबस्ट्रिंग के लिए INSTR फ़ंक्शन कॉल को परिभाषित करना होगा, जिसे आप जांचना चाहते हैं। regexp_instr('500 Oracle Parkway, Redwood Shores, CA','(Apple|Park|Shores)') के बराबर होगा:

WHERE (INSTR('500 Oracle Parkway, Redwood Shores, CA', 'Apple') > 0 
     OR 
     INSTR('500 Oracle Parkway, Redwood Shores, CA', 'Park') > 0 
     OR 
     INSTR('500 Oracle Parkway, Redwood Shores, CA', 'Shores') > 0) 

अपनी आवश्यकताओं पर निर्भर करता है, पूर्ण पाठ खोज कार्यक्षमता आप क्या चाहते हैं की दिशा में अधिक हो सकता है?

2

स्पष्ट रूप से बिना regexp के इस तरह के एक सुरुचिपूर्ण समाधान नहीं होगा, जब तक कि आप अपना खुद का पीएल/एसक्यूएल फ़ंक्शन लिखते हैं जो एक ही काम करता है। अन्यथा आपको ऐसा कुछ करना होगा:

with data as (select '500 Oracle Parkway, Redwood Shores, CA' string from dual) 
select nvl(min(pos),0) from 
(select instr(data.string, 'Apple') pos 
    union all 
    select instr(data.string, 'Park') pos 
    union all 
    select instr(data.string, 'Shores') pos 
) 
where pos > 0; 
+0

मुझे यह एक अद्भुत जवाब मिल गया! तो मैंने कोशिश की। और मैंने इसके प्रदर्शन पर एक नज़र डाली। यह पीएल/एसक्यूएल दुभाषिया से ओरेकल को क्वेरी भेजता है - दूसरे शब्दों में यह करने के लिए आप जो करने की कोशिश कर रहे हैं, यह एक बहुत ही धीमा तरीका है! –

+0

मुझे शक नहीं है! –

+0

@ स्क्लंप: "पीएल/एसक्यूएल दुभाषिया से ओरेकल को क्वेरी भेजता है"? –

संबंधित मुद्दे