чистый SQL, но не очень хорошо проверенный ...
select to_number(substr(postfix, 2, instr(postfix, ',' ,2)-2)) id
from (
select substr(val, instr(val, ',', 1, n)) postfix
from (select ',101,102,103,' val from dual)
, (
select level n
from dual
connect by level < 10)
where instr(val, ',', 1, n) > 0)
where instr(postfix, ',' ,2)> 2;
РЕДАКТИРОВАТЬ : улучшено
select substr(postfix, 1, instr(postfix, ',' ,1)-1)
from (
select substr(val, instr(val, ',',1, level)+1) postfix
from (select ',101,102,103,' val from dual)
connect by instr(val, ',', 2, level) > 0
);
Примечание:
- до / после исправления строк с запятой
- принять верхний предел (10 в примере) в соответствии с вашими потребностями (не требуется в улучшенной версии).
- используйте табличную функцию in_list, упомянутую Justing Cave, это, вероятно, лучше:)
credit: нечто подобное есть в книге Стефана Фарула «Рефакторинг приложений SQL» (O'Reilly)