आपका कोड काम नहीं करता है, क्योंकि DUAL
तालिका में कोई code
नहीं है कॉलम; हालांकि, अगर हम मानते हैं कि आप एक अलग तालिका का उपयोग कर रहे हैं जिसमें वह कॉलम है:
CREATE TABLE table_name ( code ) AS
SELECT '[1],[22],[333],[4444],[55555],[666666],[7777777],[88888888],[999999999],[0000000000]' FROM DUAL
फिर आप एक पुनरावर्ती उप-क्वेरी फैक्टरिंग क्लॉज का उपयोग कर सकते हैं:
WITH rsqfc ( code, start_pos, end_pos ) AS (
SELECT code,
1,
INSTR( code, ',', 1 )
FROM table_name
UNION ALL
SELECT code,
end_pos + 1,
INSTR( code, ',', end_pos + 1 )
FROM rsqfc
WHERE end_pos > 0
)
SELECT DISTINCT
REPLACE(
CASE end_pos
WHEN 0
THEN SUBSTR( code, start_pos + 1, 8 )
ELSE SUBSTR( code, start_pos + 1, LEAST( end_pos - start_pos - 1, 8 ) )
END,
']'
) AS code
FROM rsqfc;
कौन सा आउटपुट:
db<>fiddle यहां