यदि आपके पास केवल एक स्ट्रिंग है और आप जानते हैं कि इसमें हमेशा चार भाग होते हैं, तो आप इसे केवल मानक स्ट्रिंग फ़ंक्शंस का उपयोग करके (और नियमित अभिव्यक्तियों से परहेज करते हुए, जो अधिक लचीले होते हैं लेकिन अक्सर धीमे होते हैं) इसे इस तरह विभाजित कर सकते हैं।
नोट :इस उत्तर का दूसरा भाग "भागों" की चर संख्या वाले स्ट्रिंग्स को संबोधित करता है।
with inputs ( str ) as (
select ',,defoifcd,87765' from dual
)
-- end of TEST data; SQL query begins below (use your actual table and column names)
select substr(str, 1, instr(str, ',') - 1) as part_1,
substr(str, instr(str, ',') + 1,
instr(str, ',', 1, 2) - instr(str, ',') - 1) as part_2,
substr(str, instr(str, ',', 1, 2) + 1,
instr(str, ',', 1, 3) - instr(str, ',', 1, 2) - 1) as part_3,
substr(str, instr(str, ',', -1) + 1) as part_4
from inputs;
PART_1 PART_2 PART_3 PART_4
-------- -------- -------- --------
defoifcd 87765
1 row selected.
यदि भागों की संख्या पहले से ज्ञात नहीं है, तो आउटपुट को एक अलग प्रारूप में प्राप्त करना बेहतर है (नीचे आउटपुट देखें)। यदि किसी को कॉलम में भागों को व्यवस्थित करने की आवश्यकता है जो अन्य सभी प्रसंस्करण के बाद किया जा सकता है - और यह हमेशा SQL में किए जाने के बजाय रिपोर्टिंग एप्लिकेशन के लिए सबसे अच्छा छोड़ दिया जाता है।
with inputs ( id, str ) as (
select 1, ',,defoifcd,87765' from dual union all
select 2, '' from dual union all
select 3, 'a, b, c' from dual
)
-- end of TEST data; SQL query begins below (use your actual table and column names)
select id, str, level as part_number,
substr(aug_str, instr(aug_str, ',', 1, level) + 1,
instr(aug_str, ',', 1, level + 1) - instr(aug_str, ',', 1, level) - 1) as val
from ( select id, str, ',' || str || ',' as aug_str from inputs)
connect by level <= length(str) - length(translate(str, 'z,', 'z')) + 1
and prior id = id
and prior sys_guid() is not null
;
ID STR PART_NUMBER VAL
-- ---------------- ----------- ----------
1 ,,defoifcd,87765 1
1 ,,defoifcd,87765 2
1 ,,defoifcd,87765 3 defoifcd
1 ,,defoifcd,87765 4 87765
2 1
3 a, b, c 1 a
3 a, b, c 2 b
3 a, b, c 3 c
8 rows selected.