без регулярных выражений:
WITH t AS
(SELECT '1,2,3,3,3,4,5,6,7,7,7,7' AS num FROM dual
)
SELECT DISTINCT
SUBSTR (
num
, instr(num, ',', 1, level) + 1
, instr(num, ',', 1, level + 1) - instr(num, ',', 1, level) - 1)
AS numbers
FROM (select ','||num||',' num from t)
CONNECT BY level <= length(num) - length(replace(num,',')) -1
с регулярным выражением:
SELECT DISTINCT REGEXP_SUBSTR('1,1,2,3,4,4,5,6,6,7' , '[^,]+', 1, lvl)
FROM DUAL,
(SELECT LEVEL lvl
FROM DUAL
CONNECT BY LEVEL <= LENGTH('1,1,2,3,4,4,5,6,6,7') - LENGTH(REPLACE('1,1,2,3,4,4,5,6,6,7' , ','))+1)
WHERE lvl <= LENGTH('1,1,2,3,4,4,5,6,6,7') - LENGTH(REPLACE('1,1,2,3,4,4,5,6,6,7' , ',')) + 1
Привет, не уверен, что делает это с оракулом является хорошим способом пойти. Не могли бы вы обеспечить однозначность при вставке или синтаксический анализ своей клиентской стороны? –
Создайте функцию, которая принимает значение этого столбца в качестве параметра и возвращает строку с удалением дубликатов. –